我有一个由 shell 启动并由 shell 终止的应用程序。现在在我的应用程序中,我创建了一个 fork 来减少应用程序的负载,因此目前两个进程以不同的 PID 以相同的名称运行。现在我想终止我的程序,如果我在 shell 中使用我的进程的 PID 杀死它只会杀死父进程,使其成为僵尸进程,而子进程仍然存在。那么如何通过shell杀死子进程和父进程呢?
问问题
3460 次
4 回答
2
见命令killall
。
于 2012-04-10T12:45:01.993 回答
2
你ps -el
会得到以下
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
getpid
和ppid
of 你的进程确实pkill -P <parent_pid_name>
意味着你的父进程 id 已经产生了子进程,然后是kill <signal number> <pid>
在这种情况下,pid
你也必须提供已经产生所有子进程的父进程 id。
于 2012-04-10T12:56:00.847 回答
1
你的父进程应该在退出前捕获 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”命令杀死所有具有相同名称的进程。
于 2012-04-10T13:16:12.363 回答
0
pkill 命令可以用来杀死进程。也杀了
于 2012-04-10T17:52:41.670 回答