2023-12-22 linux C语言pthread_kill函数,pthread_kill(tid, 0)可以用来判断线程是否存在

一、该函数其实不是kill线程,而是向线程发送一个signal,pthread_kill()函数的作用是向某个线程传递一个信号,创建的线程中signal(SIGKILL,sig_handler)函数去处理对应的信号,如果你给一个线程发送了SIGQUIT、SIGKILL,但线程却没有实现signal处理函数,则整个进程退出,如果线程里面有处理signal ,则不会退出。

二、pthread_kill的返回值,成功:0; 线程不存在:ESRCH (3)信号不合法:  EINVAL(22)。

三、判断线程是否存在
      当我们给线程发送一个0就可以判断线程是否存在pthread_kill(tid, 0);这是一个保留信号,一个作用是用来判断线程是不是还活着。

四、测试C代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <pthread.h>
#include <stdio.h>
#include <signal.h>
#include <errno.h> int exit_flag = 0;void sighandler(int signum)
{printf("capture signal number %d...\n", signum);if(SIGKILL == signum)exit(1);
}void *threadfunc(void *parm)
{int i = 0;signal(SIGQUIT, sighandler);while(1){printf("threadfunc i=%d\n",i++);sleep(1);if(exit_flag)break;}printf("exit from hreadfunc\n");return NULL;
}void main()
{int rc = 0;pthread_t        threads;rc = pthread_kill(threads, 0);printf("ESRCH=%d  EINVAL=%d\n",ESRCH,EINVAL); printf("start rc=%d\n",rc);pthread_create(&threads, NULL, threadfunc, NULL);sleep(1);rc = pthread_kill(threads, 0);printf("pthread_kill(threads, 0) rc=%d\n",rc);sleep(5);rc = pthread_kill(threads, SIGQUIT);sleep(1);printf("after SIGQUIT  rc=%d\n",rc);exit_flag = 1;sleep(3);rc = pthread_kill(threads, 0);printf("after set exit_flag 1  rc=%d\n",rc);rc = pthread_kill(threads, SIGKILL);sleep(1);printf("after SIGKILL  rc=%d\n",rc); while(1);return ;
}

五、参考文章

linux中pthread_kill函数详解-CSDN博客

第六章_信号 : signal函数--信号-CSDN博客

https://www.cnblogs.com/bigben0123/p/3184094.html

判断线程是否存活——pthread_kill()函数-CSDN博客

线程的信号pthread_kill()函数(线程四)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发系统学习指南

随着华为鸿蒙系统的推出&#xff0c;越来越多的开发者开始关注和学习鸿蒙开发。本文将为你提供一份全面的鸿蒙开发系统学习指南&#xff0c;帮助你从零开始系统地学习鸿蒙开发。 一、了解鸿蒙系统 在开始学习鸿蒙开发之前&#xff0c;你需要了解鸿蒙系统的基本原理、架构和开…

Ubuntu20.04.2-mate上Lazarus安装与测试

简言 Lazarus采用RAD方式界面开发&#xff0c;一套代码可交差编译出windows、ios、android、solaris、BSD等 各平台运行的程序&#xff0c;在unbuntu的repo中有2.2.0版本可用&#xff0c;在sourceforge上有2.2.6版本和3.0.0的Rolling版可下载安装&#xff0c;但感觉上2.2.0和2…

跨境电商独立站深度分析演示网站

对于跨境电商卖家来说&#xff0c;多平台、多站点的布局是非常重要的战略。这样做可以规避”鸡蛋放在同一个篮子里”的风险也能够追求更高的销售额和利润。同时&#xff0c;市场的变化也带来了新的发展机会&#xff0c;因此很多出海企业都希望抓住独立站的新机遇&#xff0c;抢…

【优质】「web开发网页制作」html+css关于动漫主题海贼王网页制作(7页面附源码)

涉及知识 动漫主题网页制作&#xff0c;海贼王网站7页面&#xff0c;动漫divcss&#xff0c;动漫网站成品&#xff0c;CSSDIV布局&#xff0c;期末网页大作业&#xff0c;网页作业成品&#xff0c;web前端源码实例&#xff0c;如何制作网页&#xff0c;网页设计思路&#xff0…

SpringIOC之SimpleTimeZoneAwareLocaleContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

vue整合axios 未完

一、简介 1、介绍 axios前端异步请求库类似jouery ajax技术&#xff0c;axios用来在前端页面发起一个异步请求&#xff0c;请求之后页面不动&#xff0c;响应回来刷新页面局部&#xff1b;Axios 是一个基于 promise 的 HTTP 库&#xff0c;可以用在浏览器和 node.js 中 2、特…

IntelliJ IDEA 2020将SpringMVC项目打成war包

一 、打开 Project Structure 进行配置 1. 打开方式 &#xff08;1&#xff09;CtrlAltShiftS &#xff08;2&#xff09;File->Project Structure &#xff08;3&#xff09;点击如下图标&#xff1a; 2. 进入 Project Structure&#xff0c;添加Artifacts Web Applica…

后台留言列表

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>后台管理系统</title> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <meta http-equiv"Acc…

设计测试用例

1.万能公式设计测试用例 设计测试用例的外能思路 问&#xff1a;测试用例是不是越多越好&#xff1f; 答&#xff1a;测试用例并不是越多越好&#xff0c;测试用例能够提高系统测试覆盖率就是好的测试用例。 万能功能&#xff08;6个&#xff09; 功能测试界面测试性能测试兼容…

解决xcode 运行不老iPhone 15 iOS 17.1 设备的问题

问题 最近要查看一下ios 17.1的设备的性能&#xff0c;但是当前版本的Xcode运行不了 解决方法 1、更新Xcode版本到15.1以上 2、更新完成后&#xff0c;大概率出现这个情况 原因&#xff1a;在app Store中更新到Xcode15后,运行不了模拟器和真机.需要下载iOS 17对应的模拟器.&…

Linux 一键部署二进制Gitea

gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…

python报错A value is trying to be set on a copy of a slice

加入.copy()即可避免该报错提示 原代码&#xff1a; df5df4.drop_duplicates() print(df5.shape)df5[班型中文名称]df5[班型名称]-A print(df5.head()) 输出结果&#xff1a; 修改后代码&#xff1a; df5df4.drop_duplicates().copy() print(df5.shape)df5[班型中文名称]df…

通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能

作者&#xff1a;韦鑫&#xff0c;Higress Committer&#xff0c;来自南京航空航天大学分布式系统实验室 导读&#xff1a;本文将和大家一同回顾 Spring Cloud Gateway 是如何满足 HTTP 请求/响应转换需求场景的&#xff0c;并为大家介绍在这种场景下使用 Higress 云原生网关的…

一个屌丝程序员的分享

目录 闲扯 关于chatgpt的看法 关于学习工作之外的事情 关于提升自我&#xff0c;避免内耗的事情 写在最后 闲扯 现在是2023.11.8日晚上10.37分&#xff0c;刚结束完今天的任务&#xff0c;今天过的很累&#xff0c;今年过的很快&#xff0c;今年基本过的也很不如意&#x…

不常用但是必会的Ubuntu 关机命令

文章目录 shutdown语法shutdown命令用法shutdown -h扩展参数消息参数shutdown 关机流程shutdown -H 关机流程shutdown -P关机流程 shutdown命令特别提醒推荐阅读 对于常年保持在线服务的服务器系统&#xff0c;通常关机指令不会用到&#xff0c;即便有需要用到&#xff0c;也是…

adb 基本命令合集

1.获取所有的包信息&#xff1a; adb shell pm list packages com.yu.weskul 2.清除APP缓存 adb shell pm clear <package-name> 3.查看当前应用及Activity adb shell dumpsys window | findstr "mCurrentFocus" 4.查看应用详细信息 adb shell dumpsys pack…

eventbus,在this.$on监听事件时无法在获取数据

问题&#xff1a;vue中eventbus被多次触发&#xff0c;在this.$on监听事件时&#xff0c;内部的this发生改变导致&#xff0c;无法在vue实例中添加数据。 项目场景 一开始的需求是这样的&#xff0c;为了实现两个组件(A.vue ,B.vue)之间的数据传递。 页面A&#xff0c;点击页面…

sql_lab之sqli中的宽字节注入(less32)

宽字节注入&#xff08;less-32&#xff09; 1.判断注入类型 http://127.0.0.3/less-32/?id1 http://127.0.0.3/less-32/?id1 出现 \’ 则证明是宽字节注入 2.构成闭环 http://127.0.0.3/less-32/?id1%df -- s 显示登录成功则构成闭环 3.查询字段数 http://127.0.0.3/…

7. 结构型模式 - 代理模式

亦称&#xff1a; Proxy 意图 代理模式是一种结构型设计模式&#xff0c; 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问&#xff0c; 并允许在将请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢&#xff1f; 举个例子&#xff…

Ubuntu 常用命令之 mkfs 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 mkfs 是在 Linux 和其他 Unix-like 系统中用于创建文件系统的命令。在 Ubuntu 系统中&#xff0c;mkfs 命令也是用于创建文件系统的。mkfs 是一个包装器&#xff0c;它会根据用户指定的文件系统类型调用相应的程序。 mkfs 命令的…