守护进程被杀死后能够再次启动用C写出这段代码
时间: 2023-10-03 18:09:15 浏览: 49
好的,以下是一个简单的 C 代码示例,实现守护进程被杀死后能够自动重启:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>
#include <errno.h>
#include <string.h>
void daemonize()
{
pid_t pid;
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
} else if (pid != 0) {
_exit(0);
}
if (setsid() < 0) {
perror("setsid");
exit(1);
}
if (chdir("/") < 0) {
perror("chdir");
exit(1);
}
umask(0);
int i;
for (i = 0; i < 3; ++i) {
close(i);
}
open("/dev/null", O_RDWR);
dup(0);
dup(0);
}
void daemon_process()
{
daemonize();
while (1) {
printf("守护进程正在运行中...\n");
sleep(10);
}
}
void restart_daemon(int signal)
{
if (signal == SIGCHLD) {
pid_t pid;
int status;
while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
printf("守护进程终止,正在重新启动...\n");
daemon_process();
}
}
}
int main()
{
signal(SIGCHLD, restart_daemon);
pid_t pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) {
daemon_process();
} else {
while (1) {
sleep(10);
}
}
return 0;
}
```
该代码创建了一个守护进程,并在父进程中实现了守护进程的监控和自动重启功能。具体而言,父进程通过捕获 SIGCHLD 信号来检测子进程状态,一旦发现守护进程被终止,便会重新启动它。同时,也可以通过手动按下键盘中断信号(Ctrl+C)来终止程序。