函数:

int pthread_cancel(pthread_t thread);//参数:线程 ID

注意:并不是调用了 pthread_cancel,就一定能杀死进程,
必须死在“取消点”上,就是必须作一次系统调用,在不知道函数体中是否有取消点的情况下,也可以手动添加 pthread_testcancel();
举例:

#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <string.h>
void * func (void *arg) {while(1){// printf("I am a thread,tid=%lu\n", pthread_self() ); //获得子线程ID// sleep(1);pthread_testcancel(); // 如果while内语句全部注释后,就必须自己设置取消点}return NULL; }
int main()
{pthread_t tid;pthread_create(&tid, NULL, func, NULL); //创建子线程printf("I am main thread, will kill %lu after 3s\n", tid);sleep(3); //防止子线程马上被杀死pthread_cancel(tid); //杀死线程int ret = pthread_join(tid, NULL); //回收子进程资源if(ret > 0){printf("ret = %d, msg=%s\n",ret, strerror(ret)); //回收失败,输出错误号,打印错误信息}return 0;
}

Linux学习之系统编程篇:杀死 / 取消线程相关推荐

  1. Linux学习之系统编程篇:对线程的基本认识

    (1)fork()后创建的子进程是父进程的拷贝,那么pthread_create,创建线程,创建的线程跟原进程有什么关系呢? fork 会通过拷贝产生新的虚拟地址空间(PCB 会变化),而 pthre ...

  2. Linux学习之系统编程篇:实现线程分离

    函数: int pthread_detach(pthread_t thread); // 参数:线程 ID 最大特点: (1)子进程会自己回收 PCB,因此调用该函数之后,不需要调用 pthread_ ...

  3. Linux学习之系统编程篇:单个线程的退出函数

    能否用 exit 来退出某个线程,exit 是用来退出进程的,因为父子线程共享同一地址空间,如果在某线程中使用,会使 所有线程全退出,因此需要使用别的函数 :pthread_exit (注意:子线程使 ...

  4. Linux学习之系统编程篇:创建线程函数

    所有线程函数相同点: (1)函数调用成功返回 0,失败返回错误号(但注意:不能用 perror 打印). (2) 头文件:#include <pthread.h> 编译时候需要使用线程库, ...

  5. Linux学习之系统编程篇:ps 和 kill 命令以及父子进程间数据共享模式

    一.ps 和 kill 命令 1.ps 命令 常用方式: ps aux :查看正在运行进程信息(主要查 pid). ps ajx :更加详细(PID. PPID:父进程 id. PGID:进程组 id ...

  6. Linux学习之系统编程篇:编写一个守护进程

    需求:写一个守护进程,每隔 2s 获取一次系统时间,将这个时间写入到磁盘文件 #include <stdio.h> #include <stdlib.h> #include & ...

  7. Linux学习之系统编程篇:守护进程(精灵进程、后台进程)

    一.背景 一般情况下,启动终端(shell),系统会创建一个会话(shell 进程是会长),经过后续各种操作,该会话中会存在多个进程组,每个进程组中也会有多个进程(父进程是组长),若此时关闭 shel ...

  8. Linux学习之系统编程篇:与产生信号有关的函数

    一.kill kill : 给指定的进程法信号. (1)头文件: #include <sys/types.h>#include <signal.h> (2)函数原型: int ...

  9. Linux学习之系统编程篇:shm 共享内存及其操作函数

    一.shm 和 mmap 的区别 (1)mmap 是在磁盘上建立一个文件,每个进程地址空间中开辟出一块空间进行映射.shm 每个进程最终会映射到同一块物理内存.shm 保存在物理内存,这样读写的速度最 ...

最新文章

  1. 挺带劲,这款国人开源的监控系统功能真强大~
  2. Objective-C KVC
  3. 1151压力变送器型号_罗斯蒙特变送器的标准精度!
  4. 【复杂系统迁移 .NET Core平台系列】之调度服务改造
  5. 使用适用于Java 2的AWS开发工具包的AWS DynamoDB版本字段
  6. php android 复制粘贴板,Android_Android剪贴板用法详解,本文实例详述了Android剪贴板的 - phpStudy...
  7. python能做人机界面吗_人机交互程序 python实现人机对话
  8. 经典面试题(三):ASP.NET部分----ASP.NET 页面之间传递值的几种方式
  9. 字符串匹配问题 ----- KMP算法
  10. rsync 安装 配置 实例
  11. 疯狂python讲义这本书怎么样_疯狂Python讲义(读书笔记)
  12. pb 应用 迁移 linux_将你的应用迁移到 Python 3 的三个步骤 | Linux 中国
  13. eclipse优化设置
  14. 离合器膜片弹簧的优化设计matlab,基于matlab目标函数的建立优化离合器膜片弹簧的设计研究.doc...
  15. Kinetis系列单片机(飞思卡尔,NXP )单片机唯一ID获取
  16. java生成xlsx文件
  17. linux 命令 dd 详解
  18. 育儿心得,所有适龄女青年都该看一下(转)
  19. 做游戏,学编程(C语言) 15 太鼓达人
  20. word公式转换神器GrindEQ 多次使用方法

热门文章

  1. 宋体字体是什么_Win10 系统替换 macOS 苹方字体 - 瞬间提升文字清晰
  2. 6.29 Vue 第二天 学习笔记
  3. 将SimCLR应用于NLP预训练模型,提升句子语义表征效果
  4. nefu java作业2020.3.11第二章
  5. 创客更新装备 动态规划
  6. Spring Boot2.0 JPA 实现分页(简单查询分页、复杂查询分页)
  7. 计算机一级电子表格TF函数,tf.slice()函数详解(极详细)
  8. springcloud出现org.springframework.boot.context.properties.ConfigurationPropertie错误
  9. SpringMVC-拦截器快速入门
  10. Vue + Element UI——侧边栏LOGO设计DEMO