如何通过shell杀死父子进程?

时间:2012-04-10 12:38:17

标签: c++ linux shell fork parent-child

我有一个由shell启动并由shell终止的应用程序。现在,在我的应用程序中,我创建了一个fork来减少应用程序的负载,因此当前有两个进程在同一个名称上运行,具有不同的PID。现在我想终止我的程序,如果我在shell中使用我的进程的PID杀死它只会杀死父进程,将其保留为僵尸进程并保留子进程。那么如何通过shell杀死子进程和父进程?

4 个答案:

答案 0 :(得分:2)

请参阅命令killall

答案 1 :(得分:2)

执行ps -el您将获得以下内容

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD 

让您的流程pidppid执行pkill -P <parent_pid_name>,这意味着您的父进程ID已生成子级,后跟kill <signal number> <pid>,在这种情况下也代替{ {1}}您必须提供已生成所有子项的父进程ID。

答案 2 :(得分: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”命令终止具有相同名称的所有进程。

答案 3 :(得分:0)

pkill命令可以用来杀死进程。还有killall