Ich habe die folgende Situation: Thread 1: Forks ein Kind und das Kind, sagen A wiederum gabelt sich wieder und führt einen Prozess. BIgnorieren/Blockieren SIGPIPE Signale in Multi-Thread-Linux-Programm
Thread 2: wartet auf Befehle über eine Unix-Domain-Socket und tötet den Prozess, B, die mit einem Kind, A in Thread 1 Respond gegabelt wurde Anrufer, dass es das Kind getötet hat
Ich mag SIGPIPE für Thread 2 zu ignorieren, da ich nicht möchte, dass das Programm abstürzt, wenn der Client den Socket geschlossen hat. Also habe ich versucht, diese
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGPIPE);
pthread_sigmask(SIG_BLOCK, &set, NULL);
mit tun Dadurch Block SIGPIPE hilft, aber es blockiert auch die Fähigkeit des Fadens 1 SIGKILL, um das Kind zu senden.
I auch versucht, die unten in Hauptfunktion vor dem Erstellen von Threads
signal(SIG_IGN, SIGPIPE);
und senden mit MSG_NOSIGNAL Flag in Buchse verwendet wird.
Das hilft auch meinem Szenario mit SIGKILL nicht. Irgendeine Idee, wie man das SIGPIPE in einem Multithread-Zustand wie oben sicher mit Gabeln und Execs und SIGKILLs ignorieren kann?