以下のコードでは、システム関数が実行されると(Linuxで、g ++でコンパイルさSIGCHLD
れると)、Solarisコードでは発生しないシグナルをプロセス(呼び出し元)に送信します。つまり、Solarisで同じコードを実行すると、システム関数は呼び出されたプロセスにシグナルを送信しません。その結果、Linuxでの私のプロセスがハングします。
#include <iostream>
using namespace std;
#include <cstdlib>
#include <signal.h>
void sigHandler(int sgnNbr)
{
cout <<"Signal " << sgnNbr << "caught" << endl;
system("echo $HOSTNAME");
exit(1);
}
int main()
{
signal(SIGCHLD,sigHandler);
system("echo $HOSTNAME");
return 0;
}
私の質問は次のとおりです。
- 上記の場合、なぜプロセスがハングするのですか?
- システム関数がSolarisで信号を送信しないのはなぜですか?
...そして私の実際のアプリケーションに関連する私の最後の質問:
実際、私の実際のアプリケーション(4つのシグナルに対して単一のシグナルハンドラーが存在する)では、SIGABRTシグナルをプロセスに送信する他のプロセスとシグナルハンドラーでは、システム関数を使用して1つのプロセスを強制終了し、その結果、ハングしました(これは上記のシナリオに似ています)。これを克服する方法はありますか?