代码之家  ›  专栏  ›  技术社区  ›  HackX123

在多线程linux程序中忽略/阻止SIGPIPE信号

  •  2
  • HackX123  · 技术社区  · 9 年前

    回应打电话的人,说孩子已经死了

    我想忽略线程2的SIGPIPE,因为我不想在客户端关闭套接字时程序崩溃。所以我试着用

    sigset_t set;
    sigemptyset(&set);
    sigaddset(&set, SIGPIPE);
    pthread_sigmask(SIG_BLOCK, &set, NULL);
    

    在创建线程之前,我还尝试在main函数中使用下面的函数

    signal(SIG_IGN, SIGPIPE);
    

    在套接字中使用MSG_NOSIGNAL标志发送。

    这也无助于我的SIGKILL场景。知道如何在像上面这样的多线程条件下安全地忽略发送了fork、exec和sigkill的SIGPIPE吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   HackX123    9 年前

    经过调查,我找到了解决办法。我必须这么做
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
    在孙子函数中的each fork()调用之后和exec()之前。这导致SIGKILL未被阻止。