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,一经查实,立即删除!

相关文章

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+…

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…

解决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…

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 命令的…

Guava的TypeToken在泛型编程中的应用

第1章&#xff1a;引言 在Java世界里&#xff0c;泛型是个相当棒的概念&#xff0c;能让代码更加灵活和类型安全。但是&#xff0c;泛型也带来了一些挑战&#xff0c;特别是当涉及到类型擦除时。这就是TypeToken大显身手的时候&#xff01; 作为Java程序员的咱们&#xff0c;…

【ITK库学习】使用itk库进行图像配准:内插器(插值)

目录 1、itkNearestNeighborInterpolateImageFunction 最近点插值2、itkLinearInterpolateImageFunction 线性插值3、itkBSplineInterpolateImageFunction B样条插值4、itkWindowedSincInterpolateImageFunction 窗口化Sinc插值5、itkRayCastInterpolateImageFunction 投射插值…

Mac OS 13+,Apple Silicon,删除OBS虚拟摄像头(virtual camera),

原文链接: https://www.reddit.com/r/MacOS/comments/142cv OBS为了捕获摄像头视频,将虚拟摄像头插件内置为系统插件了.如下 直接删除没有权限的,要删除他,在mac os 13以后,需要关闭先关闭苹果系统的完整性保护(SIP) Apple 芯片(M1,....)的恢复模式分为两种,回退恢复模式,和…

MySQL数据库 视图

目录 视图概述 语法 检查选项 视图的更新 视图作用 案例 视图概述 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存…

K8S 日志方案

目录 一、统一日志管理的整体方案 1、基础日志 2、Node级别的日志 3、集群级别的日志架构 二、安装统一日志管理组件 1、 部署Elasticsearch 2、部署Fluentd 3、部署Kibana 三、日志数据展示 一、统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内…