私は継続的にその親との間で信号を送受信しなければならないゲームサーバーをシミュレートします。シナリオは次のとおりです。連続して2つのプロセスに信号を送る方法
- 親はゲームに信号を送ります。
- ゲームは、信号をキャッチし、親に信号を送ります。
- 親が信号をキャッチし、ゲームに再び信号を送ります。
のように...
問題が停止し、最初のラップの後に受信または送信することです:
static int game_s;
void game()
{
printf("game\n");
signal(SIGUSR1,game);
sleep(1);
kill(getppid(),SIGUSR1);
pause();
}
void parent()
{
printf("parent\n");
signal(SIGUSR1,parent);
sleep(1);
kill(game_s,SIGUSR1);
pause();
}
void main()
{
game_s = fork();
if(game_s>0)
{
signal(SIGUSR1,parent);
sleep(1);
kill(game_s,SIGUSR1);
pause();
}
else
{
signal(SIGUSR1,game);
pause();
}
}
出力は以下の通りです:
game
parent
なぜここに止まったの?関連するシグナルハンドラが残されていたまで、ゲームサーバキャッチ親の信号とプリント「ゲームは」再び...
子が子をシグナリングしておらず、親が自分のシグナリング自体(コード内の親)をシグナリングしていませんか。このような状況では、私は通常、セマフォとその2つを導入します。 1つは親を待ち、もう1つは子が待ち、2つがループ中である –
信号はほとんどIPCを実装するには悪い選択です。 SHM、パイプ、ソケット、MQ – alk
子供は自分自身に信号を送ることはなく、作成された子供のpidを保存するgame_sにSIGUSR1を送信します...そうではありませんか? –