linux中pthread_kill函数详解
(1)int pthread_kill(pthread_t thread, int sig);向指定ID的线程发送sig信号
(2)pthread_kill可不是kill,而是向线程发送signal。还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数。如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出。pthread_kill(threadid, SIGKILL)也一样,杀死整个进程。
如果要获得正确的行为,就需要在线程内实现signal(SIGKILL,sig_handler)了。
所以,如果int sig的参数不是0,那一定要清楚到底要干什么,而且一定要实现线程的信号处理函数,否则,就会影响整个进程。
如果int sig是0呢,这是一个保留信号,一个作用是用来判断线程是不是还活着。
(3)pthread_kill的返回值:
成功:0
线程不存在:ESRCH
信号不合法:EINVAL
所以,pthread_kill(threadid,0)就很有用啦。
int kill_rc = pthread_kill(thread_id,0);
if(kill_rc == ESRCH)
printf("the specified thread did not exists or already quit\n");
else if(kill_rc == EINVAL)
printf("signal is invalid\n");
else
printf("the specified thread is alive\n");
上述的代码就可以判断线程是不是还活着了。
linux中pthread_kill函数详解相关推荐
- Linux中fork()函数详解
Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...
- linux 中 sigaction 函数详解
linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...
- Linux中execl函数详解与日常应用(附图解与代码实现)
目录 execl函数 exec函数族的日常应用 1.Linux中第一个终端的创建 2.终端下.c文件的执行 exec其实并不是一个函数,而是由六个以exec开头的函数所构成的一个函数族,如下图所示 e ...
- linux中 fopen函数,详解C语言中的fopen()函数和fdopen()函数
C语言fopen()函数:打开一个文件并返回文件指针头文件: #include fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * ...
- linux中fork函数详解,fork() 函数详解
fork() 函数是 linux/unix 下一种特别的创建子进程的函数,它不同与 Windows,这个函数在执行成功后会有两个返回值,一个返回值==0代表创建了子进程,一个返回值大于0代表还是当前程 ...
- Linux中fork函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不 ...
- linux中sigaction函数详解
一.函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, const struct sigaction * ...
- Linux中ftok函数详解
在ipc通信中 system V 模式的ipc通信中都需要一个key值来生成对应的ID,那么key是如何生成的呢? 通过函数ftok生成 #include <sys/types.h>#in ...
- linux中open函数详解
1.open函数 包含头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> ope ...
最新文章
- 程序员到底为什么要掌握数据结构与算法?
- 大数据处理时用到maven的repository
- sun m5000 snapshot
- mysql5.7重新初始化_MySQl 5.7 初始化方式变更
- 为什么kafka使用磁盘而不是内存
- protobuf2和3同时安装_在 Ubuntu 上安装 Protobuf 3 的教程详解
- 访问控制模型ACL和RBAC
- java catch匹配忽略_Java 语法 try catch使用容易忽略的细节 BigDecimal
- 三元运算符和if else_PHP If-Else,Switch Case和速记三元运算符示例
- 《Web漏洞防护》读书笔记——第5章,数据安全
- 团队项目绩效考核方案表
- 如何在zencart里实现多标签标签云效果
- 人生的三把钥匙,太经典了!
- 为什么阿里巴巴规定禁止超过三张表 join
- 模型量化(1):模型量化简介
- 在一台电脑上如何安装两个JDK,并实现自由切换
- PN532NFC模块串口通信使用教程
- 网易七鱼客服对接记录以及Vue项目里使用
- PostgreSQL 按指定顺序排序
- 2020-08-13
热门文章
- TCP/IP 与OSI结构图
- c#/.net 循序渐进理解-委托
- 程序员到底要不要用框架开发?
- EIgen:Matricx和vector类的定义和使用
- B树、B+树其实很简单,看不懂你找我
- 从硬件到框架,30+巨头参与的AI基准竞争结果公布(第一回合)
- 算法:数值的整数次方
- 工作总结 Rezor 里面的一些小知识----自定义类型 放在标签值中 会直接跳过去...
- iOS linker command failed with exit code 1 (use v to see invocation)
- 从mongodb中查询数据