重要な事前知識:私には、元のプロセスによってフォークされた 2 人の子供がいます。子は、2 つのユーザー定義シグナル (SIGUSR1 または SIGUSR2) のいずれかを親に送信するだけです。
コードは次のように構成されます。
if (pid == 0 || second_child == 0) {
/* Just some pseudocode for basic logic */
while (1) {
sleep(2);
kill(parent_pid, SIGUSR1) or kill(parent_pid, SIGUSR2);
}
} else {
while (1) {
struct sigaction psa;
psa.sa_handler = sigHandler;
/* three signals that need to be handled */
sigaction(SIGUSR1, &psa, NULL);
sigaction(SIGUSR2, &psa, NULL);
sigaction(SIGINT, &psa, NULL);
pause();
}
}
sigHandler メソッド:
void sigHandler (int sigNum) {
switch(sigNum) {
case SIGUSR1:
//print something using write()
break;
case SIGUSR2:
//print something using write()
break;
default:
exit(0);
}
}
sigHandler() の呼び出しが正常に行われません。sigHandler() で発生する print ステートメントは最終的に停止するだけで、出力はありません。問題は、sigHandler の実行中に親に送信されるシグナルに関係していると思いますが、確かではありません。