![](/img/trans.png)
[英]C++ WINAPI: How to kill child processes when the calling (parent) process is forcefully terminated?
[英]how to kill parent and child process through shell?
我有一个由 shell 启动并由 shell 终止的应用程序。现在在我的应用程序中,我创建了一个分支来减少我的应用程序的负载,因此当前两个进程以相同的名称运行,但 PID 不同。 现在我想终止我的程序,如果我在 shell 中使用进程的 PID 终止它,它只会终止父进程,使其成为僵尸进程,而子进程仍然存在。 那么如何通过shell同时杀死子进程和父进程呢?
请参阅命令killall
。
做ps -el
你会得到以下内容
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
获取你进程的pid
和ppid
do pkill -P <parent_pid_name>
意思是你的父进程 id 已经产生了孩子,然后是kill <signal number> <pid>
在这种情况下,你必须给父进程代替pid
id 谁产生了所有的孩子。
您的父进程应该捕获 SIGTERM 并在退出前杀死它的子进程。
我写在 C
int child;
void sighandler(int sig) {
if (sig == SIGTERM) {
if (child != -1) kill(child, SIGTERM);
}
}
int main() {
int i;
child = -1;
signal(SIGCHLD, SIG_IGN);
signal(SIGTERM, sighandler);
setsid();
setpgid(0,0);
i = fork();
switch(i) {
case -1:
break;
case 0: // child
sleep (100);
break;
default:
child = i;
sleep (100);
break;
}
return 0;
}
您可以使用“killall”命令终止所有同名进程。
pkill 命令可用于终止进程。 还有 killall
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.