1

いくつかの問題があります。シグナルを使用して親プロセスと子プロセスを同期する方法が明確ではなく、このコードが機能しません。親が子に信号を送信し、子pause()が終了し、子が親に信号を送信し、親pause()が終了..など、なぜそうではないのですか?

#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>

void handler_cp() {
}

void handler_pc() {
}

void child_proc() {
    int i = 0;
    for (; i < 50; ++i) {
        pause();
        kill(getppid(), SIGUSR2);
    }

void parent_proc(pid_t ch) {
    int j = 0;
    for (; j < 50; ++j) {
        kill(ch, SIGUSR1);
        pause();
    }
}

int main(int argc, char* argv[]) {
    signal(SIGUSR1, handler_cp);
    signal(SIGUSR2, handler_pc);
    pid_t ch = fork();
    if (ch == 0)
        child_proc();
    else
        parent_proc(ch);
    return 0;
}
4

2 に答える 2

1

child_proc メソッドで、次のように行を逆にします。

          kill(getppid(),SIGUSR2);
          pause();

これにより、子供が寝る前に親が目覚めます。

于 2015-02-01T12:25:05.803 に答える