私は、pause()
がプログラムをスリープさせる原因となるため、pause()
とユーザーの信号を使用しています。信号が受信されるまで。私はこれをやっている:ユーザー定義のシグナルを受け取ったときにプロセスがポーズしない
pid_t child = fork();
if(child < 0) {
perror("Fork error");
exit(1);
}
else if (child > 0) { //parent process
//do something here, then:
printf("Parent pausing\n");
pause();
printf("parent received sigusr2\n");
//do something
kill(child, SIGUSR2);
printf("Sent signal to child\n");
sleep(1);
fflush(NULL);
pause();
kill(child,SIGTERM);
waitpid(child, &status, 0);
}
else { //child process
//do something, then
printf("Child sending sigusr2\n");
kill(getppid(), SIGUSR2);
printf("Child pausing\n");
pause();
//do something
kill(getppid(), SIGUSR2);
fflush(NULL);
printf(frompipe);
pause();
}
は(これは私が示すよ特定の問題が発生した後、まだコーディングであり得ていない問題がある可能性があります)。
Parent pausing
Child sending sigusr2
Child pausing
User-defined signal 2
そして親プロセスがシグナルを受け取っていないかのようにそれだけで(それがparent received sigusr2
を印刷していないので)、そこに停止します。だから、私の現在の出力があります。プログラムは終了しますが、プロセスはバックグラウンドで停止します。私は間違って何をしていますか?
あなたはありますかこれらのシグナルのシグナルハンドラ? 'man pause'から:* pause()は、プロセスを終了させるシグナルが送られるか、シグナル捕捉関数の呼び出しを引き起こすまで、呼び出しプロセス(またはスレッド)をスリープさせます。*** –
同じものからマンページ、 'sigsuspend(2)'は一見価値があるかもしれません。 – Phillip
私は 'pause()'自体がシグナルを捕まえたと思っていましたが...? –