关于linux:当父进程被’kill -9’杀死时,如何终止子进程 | 码农家园
kill -9将向父进程发送SIGKILL信号。 但是SIGKILL不能被捕获。 那么父进程如何终止子进程?
父级一旦通过SIGKILL杀死,将停止存在,因此无法再向其子级进程发送信号。 子进程将必须自己监视其父进程。 当父项被杀死时,PPID更改为1-这可能有助于客户端对被杀死的父项采取行动。 但是"确保子进程始终与父进程一起关闭"是不可能的,这是SIGKILL的本质。 但是,如果您觉得自己很勇敢,可以随时修改源代码并将SIGKILL重新定义为其他内容,但是我不建议这样做:)
pkill -TERM -P 27888
这将杀死所有子进程。 27888是父级的进程ID。
不,这不是我期望的答案。 作为Linux应用程序开发人员,无论用户如何终止父进程,我们都应确保子进程始终被父进程关闭
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/prctl.h>
#include <signal.h>
int main(void)
{
pid_t pid;
//fork一个进程
pid = fork();
//创建失败
if (pid < 0)
{
perror("fork error:");
exit(1);
}
//子进程
if (pid == 0)
{
/*父进程退出时,会收到SIGKILL信号*/
prctl(PR_SET_PDEATHSIG,SIGKILL);
printf("child process.\n");
printf("child pid:%d,parent pid:%d\n",getpid(),getppid());
printf("sleep 10 seconds.\n");
//sleep一段时间,让父进程先退出,为了便于观察,sleep 10s
sleep(10);
printf("now child pid: %d parent pid:%d\n",getpid(),getppid());
}
//父进程
else
{
printf("parent process.\n");
sleep(1);
}
return 0;
}