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

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子