我有以下情况: 线程1:分叉一个孩子和孩子,说A反过来又分叉并执行一个进程。乙
线程 2:通过 Unix 域套接字侦听命令并终止进程,B 已被子进程分叉,线程 1 中的 A 响应调用者它已终止子进程
我想忽略线程 2 的 SIGPIPE,因为我不希望程序在客户端关闭套接字时崩溃。所以我尝试使用
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGPIPE);
pthread_sigmask(SIG_BLOCK, &set, NULL);
这样做有助于阻止 SIGPIPE,但它也会阻止线程 1 向子进程发送 SIGKILL 的能力。
在创建线程之前,我还尝试在 main 函数中使用以下内容
signal(SIG_IGN, SIGPIPE);
并在套接字中使用 MSG_NOSIGNAL 标志发送。
这对我的 SIGKILL 方案也没有帮助。任何想法如何在像上面这样的多线程条件下安全地忽略 SIGPIPE,并发送了 fork 和 exec 以及 SIGKILLs?