(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函数详解相关推荐

  1. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  2. linux 中 sigaction 函数详解

    linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...

  3. Linux中execl函数详解与日常应用(附图解与代码实现)

    目录 execl函数 exec函数族的日常应用 1.Linux中第一个终端的创建 2.终端下.c文件的执行 exec其实并不是一个函数,而是由六个以exec开头的函数所构成的一个函数族,如下图所示 e ...

  4. linux中 fopen函数,详解C语言中的fopen()函数和fdopen()函数

    C语言fopen()函数:打开一个文件并返回文件指针头文件: #include fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * ...

  5. linux中fork函数详解,fork() 函数详解

    fork() 函数是 linux/unix 下一种特别的创建子进程的函数,它不同与 Windows,这个函数在执行成功后会有两个返回值,一个返回值==0代表创建了子进程,一个返回值大于0代表还是当前程 ...

  6. Linux中fork函数详解

     一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不 ...

  7. linux中sigaction函数详解

    一.函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, const struct sigaction * ...

  8. Linux中ftok函数详解

    在ipc通信中 system V 模式的ipc通信中都需要一个key值来生成对应的ID,那么key是如何生成的呢? 通过函数ftok生成 #include <sys/types.h>#in ...

  9. linux中open函数详解

    1.open函数 包含头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> ope ...

最新文章

  1. 程序员到底为什么要掌握数据结构与算法?
  2. 大数据处理时用到maven的repository
  3. sun m5000 snapshot
  4. mysql5.7重新初始化_MySQl 5.7 初始化方式变更
  5. 为什么kafka使用磁盘而不是内存
  6. protobuf2和3同时安装_在 Ubuntu 上安装 Protobuf 3 的教程详解
  7. 访问控制模型ACL和RBAC
  8. java catch匹配忽略_Java 语法 try catch使用容易忽略的细节 BigDecimal
  9. 三元运算符和if else_PHP If-Else,Switch Case和速记三元运算符示例
  10. 《Web漏洞防护》读书笔记——第5章,数据安全
  11. 团队项目绩效考核方案表
  12. 如何在zencart里实现多标签标签云效果
  13. 人生的三把钥匙,太经典了!
  14. 为什么阿里巴巴规定禁止超过三张表 join
  15. 模型量化(1):模型量化简介
  16. 在一台电脑上如何安装两个JDK,并实现自由切换
  17. PN532NFC模块串口通信使用教程
  18. 网易七鱼客服对接记录以及Vue项目里使用
  19. PostgreSQL 按指定顺序排序
  20. 2020-08-13

热门文章

  1. TCP/IP 与OSI结构图
  2. c#/.net 循序渐进理解-委托
  3. 程序员到底要不要用框架开发?
  4. EIgen:Matricx和vector类的定义和使用
  5. B树、B+树其实很简单,看不懂你找我
  6. 从硬件到框架,30+巨头参与的AI基准竞争结果公布(第一回合)
  7. 算法:数值的整数次方
  8. 工作总结 Rezor 里面的一些小知识----自定义类型 放在标签值中 会直接跳过去...
  9. iOS linker command failed with exit code 1 (use v to see invocation)
  10. 从mongodb中查询数据