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 に答える