如何杀死多个子进程

时间:2012-08-20 10:18:46

标签: c kill-process

在模拟读写器问题的C程序中,我使用fork()创建了多个子进程,并且每个子进程都调用execlp()并在 xterm <中运行另一个程序(读取器或编写器) / strong>窗口。

当我结束main()时,那些在xterm中运行的孩子仍然活着。我如何终止它们?

以下代码示例 -

main() {
    while(1) {
    scanf(choice);
    switch(choice) {
        case 1: 
            reader()
            break;
        case 2: 
            writer();
            break;
        default:
            kill(getpgid(getpid()), SIGTERM); // killing the group id
            return 0;
        }
    }

reader() {
    /*
    some semaphore manipulation
    */
    execlp("xterm", "xterm", "-e", "./read", NULL);
    /*
    some semaphore manipulation
    */
    return 0;
    }

writer() {
    /*
    some semaphore manipulation
    */
    execlp("xterm", "xterm", "-e", "./write", NULL);
    /*
    some semaphore manipulation
    */
    return 0;
    }

1 个答案:

答案 0 :(得分:0)

父母和子女的群组ID在分叉后应该相同,因此发送kill(pid,SIGTERM); 应该照顾它们(其中pid是组ID)

在下面的评论中,正如caf所指出的那样,kill(0, SIGTERM)会将信号发送给当前流程的流程组