儿童管道处理如何对父母发出信号?

时间:2016-04-08 07:24:09

标签: linux pipe signals child-process

我有一个应用程序,其中父进程启动几个线程(插件)。其中一个定期启动子进程并使用popen通过管道读取其输出。

此外,SIGUSR1可以停止父进程。除了使用管道的插件外,所有插件都停止运行:它将SIGSEGV抛出到read函数中的某个位置。

我认为这是因为子进程也在SIGUSR1上停止,因此管道变得无效。我对吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

看起来导致SIGSEGV的错误发生在另一个地方:在我之前有人以这种方式编写了unload函数:

void unload()
{
  stop_main_thread = 1;
  usleep(100000);
  LibLog::print("modem is disconnected");
}

虽然线程函数有一个usleep(pause),但pause设置为500000。

unload函数放在一个共享库中,并在程序即将关闭时调用。因此,当unload函数完成时,so-file被卸载,线程函数尝试用已知结果做一些事情。

usleep中的unload来电更改为pthread_join解决了我的问题。