希望线程在父线程退出时不会死亡- linux
want thread to not die when parent exits - linux
我不想使用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":)它会在父母离开后继续存在,之后你可以对它做任何你想做的事情。
相关文章:
- C/C++ Linux 上的多线程服务器/客户端崩溃
- 给定使用 C++ 或 C,我如何测量在 linux 下进行线程切换需要多长时间?可能吗?
- C++ Linux 中的线程无限期地等待
- 无效使用非静态成员函数 c++ 线程 linux
- Linux VM(重型多线程应用程序)的性能改进
- 睡眠:(睡眠或usleep)并没有将我的线程中的所有内容悬挂在Linux中,而是在Windows中悬挂吗?为什么
- 在Linux中减少每个线程内存
- 线程不在 Linux 上终止,但在 Mac 上终止
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- 如何在Linux上为C和C 创建线程安全LIB
- 在 C Linux 中使用三个线程使用信号量同步按顺序打印 3 4 5 50 次
- VS2017 Linux C 线程问题
- 创建线程,但不要立即在 Linux 中运行它
- 检查Linux功能以设置线程优先级
- 在 Linux 上为 Windows 编译多线程应用程序 [ C++ ]
- C /Linux:如何编写使用套接字的线程安全库
- 将终端附加到创建的线程,在 Linux 上C++
- 如何在没有条件变量的情况下阻止线程中的操作,并在Linux中根据信号恢复操作
- Seg 由对 vector (线程 linux) push_back调用而导致的错误
- 多线程Linux应用程序中的互斥