linux 线程存活状态监控,不存在就重启

2024-05-30 15:08

本文主要是介绍linux 线程存活状态监控,不存在就重启,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

直接上代码

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/time.h>
#include <string.h>
#include<unistd.h>
#include <signal.h>
#include <errno.h>/*线程变量*/
pthread_t thread[3];
pthread_mutex_t mut;void *thread1()
{/*线程互斥锁*///pthread_mutex_lock(&mut);//pthread_mutex_unlock(&mut);int i = 0;while(i++ < 10) {printf("111\n");sleep(1);}pthread_exit(NULL);
}/*定时函数*/
void sigalrm_func(int sig)
{alarm(2); /*改为定时2s*/printf("222\n");
}void *thread2()
{/*定时1s,处理函数为*/signal(SIGALRM, sigalrm_func);alarm(1);while(1);/*线程互斥锁*///pthread_mutex_lock(&mut);//pthread_mutex_unlock(&mut);pthread_exit(NULL);
}void thread_wait(int i)
{/*等待线程结束*/if(thread[i] != 0) {pthread_join(thread[i],NULL);}
}/*pthread_kill的返回值:成功(0) 线程不存在(ESRCH) 信号不合法(EINVAL)*/
void test_pthread(int i) 
{int pthread_kill_err;pthread_kill_err = pthread_kill(thread[i],0);if(pthread_kill_err == ESRCH) {printf("pthread[%d] no existence or withdrawal.\n", i);pthread_join(thread[i],NULL);sleep(10);if((pthread_create(&thread[i], NULL, switch_control_thread, NULL)) != 0) {printf("[sqlite] -- switch_control_thread create error!\n");}}else if(pthread_kill_err == EINVAL)printf("unlawful transmission of signals.\n");elseprintf("pthread[%d] still alive.\n", i);
}/*检测所有线程的存活状态*/
void *thread3()
{while(1) {sleep(3);test_pthread(0);test_pthread(1);test_pthread(2);}pthread_exit(NULL);
}void thread_create(void)
{int temp;memset(&thread, 0, sizeof(thread));/*创建线程*/if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) {printf("[sqlite] -- switch_control_thread create error!\n");}if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) {printf("[sqlite] -- data_control_thread create error!\n");}if((temp = pthread_create(&thread[2], NULL, thread3, NULL)) != 0) {printf("[sqlite] -- data_control_thread create error!\n");}
}int main()
{/*用默认属性初始化互斥锁*/pthread_mutex_init(&mut,NULL);thread_create();while(1);return 0;
}

编译:gcc main.c -o main -lpthread

运行:./main

运行结果:


这篇关于linux 线程存活状态监控,不存在就重启的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全