Linux学习之系统编程篇:杀死 / 取消线程
函数:
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学习之系统编程篇:杀死 / 取消线程相关推荐
- Linux学习之系统编程篇:对线程的基本认识
(1)fork()后创建的子进程是父进程的拷贝,那么pthread_create,创建线程,创建的线程跟原进程有什么关系呢? fork 会通过拷贝产生新的虚拟地址空间(PCB 会变化),而 pthre ...
- Linux学习之系统编程篇:实现线程分离
函数: int pthread_detach(pthread_t thread); // 参数:线程 ID 最大特点: (1)子进程会自己回收 PCB,因此调用该函数之后,不需要调用 pthread_ ...
- Linux学习之系统编程篇:单个线程的退出函数
能否用 exit 来退出某个线程,exit 是用来退出进程的,因为父子线程共享同一地址空间,如果在某线程中使用,会使 所有线程全退出,因此需要使用别的函数 :pthread_exit (注意:子线程使 ...
- Linux学习之系统编程篇:创建线程函数
所有线程函数相同点: (1)函数调用成功返回 0,失败返回错误号(但注意:不能用 perror 打印). (2) 头文件:#include <pthread.h> 编译时候需要使用线程库, ...
- Linux学习之系统编程篇:ps 和 kill 命令以及父子进程间数据共享模式
一.ps 和 kill 命令 1.ps 命令 常用方式: ps aux :查看正在运行进程信息(主要查 pid). ps ajx :更加详细(PID. PPID:父进程 id. PGID:进程组 id ...
- Linux学习之系统编程篇:编写一个守护进程
需求:写一个守护进程,每隔 2s 获取一次系统时间,将这个时间写入到磁盘文件 #include <stdio.h> #include <stdlib.h> #include & ...
- Linux学习之系统编程篇:守护进程(精灵进程、后台进程)
一.背景 一般情况下,启动终端(shell),系统会创建一个会话(shell 进程是会长),经过后续各种操作,该会话中会存在多个进程组,每个进程组中也会有多个进程(父进程是组长),若此时关闭 shel ...
- Linux学习之系统编程篇:与产生信号有关的函数
一.kill kill : 给指定的进程法信号. (1)头文件: #include <sys/types.h>#include <signal.h> (2)函数原型: int ...
- Linux学习之系统编程篇:shm 共享内存及其操作函数
一.shm 和 mmap 的区别 (1)mmap 是在磁盘上建立一个文件,每个进程地址空间中开辟出一块空间进行映射.shm 每个进程最终会映射到同一块物理内存.shm 保存在物理内存,这样读写的速度最 ...
最新文章
- 挺带劲,这款国人开源的监控系统功能真强大~
- Objective-C KVC
- 1151压力变送器型号_罗斯蒙特变送器的标准精度!
- 【复杂系统迁移 .NET Core平台系列】之调度服务改造
- 使用适用于Java 2的AWS开发工具包的AWS DynamoDB版本字段
- php android 复制粘贴板,Android_Android剪贴板用法详解,本文实例详述了Android剪贴板的 - phpStudy...
- python能做人机界面吗_人机交互程序 python实现人机对话
- 经典面试题(三):ASP.NET部分----ASP.NET 页面之间传递值的几种方式
- 字符串匹配问题 ----- KMP算法
- rsync 安装 配置 实例
- 疯狂python讲义这本书怎么样_疯狂Python讲义(读书笔记)
- pb 应用 迁移 linux_将你的应用迁移到 Python 3 的三个步骤 | Linux 中国
- eclipse优化设置
- 离合器膜片弹簧的优化设计matlab,基于matlab目标函数的建立优化离合器膜片弹簧的设计研究.doc...
- Kinetis系列单片机(飞思卡尔,NXP )单片机唯一ID获取
- java生成xlsx文件
- linux 命令 dd 详解
- 育儿心得,所有适龄女青年都该看一下(转)
- 做游戏,学编程(C语言) 15 太鼓达人
- word公式转换神器GrindEQ 多次使用方法
热门文章
- 宋体字体是什么_Win10 系统替换 macOS 苹方字体 - 瞬间提升文字清晰
- 6.29 Vue 第二天 学习笔记
- 将SimCLR应用于NLP预训练模型,提升句子语义表征效果
- nefu java作业2020.3.11第二章
- 创客更新装备 动态规划
- Spring Boot2.0 JPA 实现分页(简单查询分页、复杂查询分页)
- 计算机一级电子表格TF函数,tf.slice()函数详解(极详细)
- springcloud出现org.springframework.boot.context.properties.ConfigurationPropertie错误
- SpringMVC-拦截器快速入门
- Vue + Element UI——侧边栏LOGO设计DEMO