繁体   English   中英

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

[英]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 

获取你进程的pidppid 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM