1

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

当我结束时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;
    }
4

1 回答 1

0

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

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

于 2012-08-20T10:27:26.437 回答