2012-11-16 17 views

回答

1

如果你编程一个分离的线程死后做它的工作,那么它会死。在完成其工作后,该功能可以简单地结束或致电pthread_exit

您可以通过发送信号pthread_kill或使用全局标志或IPC形式(例如管道或消息队列)来从另一个线程中终止分离的线程。请注意,“杀死”这个词在英语和节目的多重含义之间是不明确的。该线程需要编程以对任何使用的通知机制作出反应。例如,应该为线程安装信号处理程序,并且使用pthread_killpthread_sigqueue发送的非进程范围信号(例如SIGUSR1)。最后pthreads有一个取消机制,你可以使用pthread_cancel和相关的调用。在所有这些场景中,重点是必须对线程进行编程以优雅地处理请求,但“分离”并不意味着“不可访问”。

如果信号的处置停止,继续或终止它将影响整个过程而不是单个线程。

+2

'pthread_kill'不会杀死任何东西,就像'kill'不会杀死任何东西。它发送一个信号。一些信号具有**整个进程的**默认行为终止**(从来没有一个线程);一个('SIGKILL')总是导致进程终止。如果没有任何线程从启动函数返回,调用'pthread_exit',或者作用于取消请求,就没有办法让任何线程“死掉”。 –

+0

我知道。我下班。稍后我会给出更完整的答案。 – Duck

+0

谢谢鸭子。我正在寻找一个线程是否可以在没有父进程停止的情况下意外停止。 – CoryC