作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我不想使用 fork(),因为它增加了一层我希望避免的 IPC 管理。我想使用 pthread。我已经看到用于克隆的 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 长寿——但两者都从属于包含它们的进程,并且不能长于它。
关于c++ - 希望线程在父级退出时不死 - linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335025/
我是一名优秀的程序员,十分优秀!