如何通过shell杀死父进程?
我有一个由shell启动并由shell终止的应用程序。现在在我的应用程序中,我创建了一个fork来减少我的应用程序的负载,所以目前有两个进程使用不同的PID运行在相同的名称上。现在我想终止我的程序,并且如果我在shell中使用我的进程的PID杀死它,它只会杀死父进程,使其成为僵尸进程,并且子进程仍然存在。那么如何通过shell杀死子进程和父进程呢?如何通过shell杀死父进程?
查看命令killall
。
如果我能够在终端使用kill -9 processname但我不能在shell或在我的应用程序中使用,因为我的应用程序我有一个孩子进程该子进程有另一个子进程,所以我想杀死我的应用程序中的第二个子进程,并杀死第一个子进程,或者杀死父进程,如果有可能像这样杀死 – 2012-04-10 13:14:06
做ps -el
你会得到以下
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
得到pid
和你的过程ppid
做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
我认为你可以使用一个负PID .... – pragati 2012-04-10 13:51:20