在下面的代码中,当系统函数被执行(在 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 中不发送任何信号?
...以及我的最后一个问题,这与我的实际应用有关:
实际上,在我的实际应用程序中(其中单个信号处理程序用于处理大约四个信号),其他一些进程向我的进程发送 SIGABRT 信号,而在信号处理程序中,我正在使用系统函数杀死一个进程,结果它被挂起(这与上述情况类似)。有什么办法可以克服这个吗?