希望线程在父线程退出时不会死亡- linux

want thread to not die when parent exits - linux

本文关键字:线程 linux 退出 希望      更新时间:2023-10-16

我不想使用fork(),因为它增加了我希望避免的IPC管理层。我想使用pthread。我已经看到了clone的一个strace,我不想在clone()级别开始管理线程的细节。

给它们命名:A=主线程,B=工作线程。

我想让B能够在a离开的时候得到a的信号。A可以为此注册一个atexit()。

A可能从abort()或SIGSEGV或其他终端信号中离开。B的工作都是关于日志记录:A和B共享一个容器,由A创建日志消息。如果A死亡,我希望B完成日志记录,然后退出。

现在如果A退出,B退出,我丢失了日志队列中剩下的东西。

所以我的问题是:有没有一种方法可以让B更有弹性,这样它就不会和a一起死亡?

你似乎混淆了线程进程;按照你的描述,A是一个过程,而不是一个线程。当调用abort()或遇到SIGSEGV时,a退出,B(包含在进程a中的线程)也消失。这是没有办法的,因为B与a是不可分割地联系在一起的。如果你想要一个进程比a活得长,那么你必须使用fork并创建一个新进程。

现在,你绝对可以在一个进程中拥有多个线程,并且线程B可以比创建它的线程a -prime活得更长——但是它们都从属于包含它们的进程,并且不能比它活得更长。

您可以为atexit和您期望的信号(在a中)安装处理程序,该处理程序将最终的"我在这里完成"消息推送到日志队列中,然后在退出整个进程之前与(等待)B连接。

我认为您希望使用pthread_attribute将线程创建为分离的。

https://computing.llnl.gov/tutorials/pthreads/

告诉你怎么做——只要往下搜索"detached":)它会在父母离开后继续存在,之后你可以对它做任何你想做的事情。