【问题标题】:pthread_kill kills not just a thread but the whole programpthread_kill 不仅会杀死一个线程,还会杀死整个程序
【发布时间】:2015-12-14 00:51:39
【问题描述】:

我正在使用int s=pthread_kill(thread_arr[t], 9); 将 SIGKILL 信号发送到位于 thread_arr t 位置的线程,但我的整个程序都被杀死了,而不是杀死这个确切的线程。谁能告诉我我做错了什么?

【问题讨论】:

    标签: linux pthreads kill sigkill


    【解决方案1】:

    我认为答案在 pthread_kill 的手册页中:

    信号处置是进程范围的:如果信号处理程序是 安装后,将在线程中调用处理程序,但如果 信号的处置是“停止”、“继续”或“终止”, 这个动作会影响整个过程。

    SIGKILL 的作用是终止进程,信号不能被捕获、阻塞或忽略。

    我建议使用不同的信号,并让接收信号的线程自行停止,而不是使用

    【讨论】:

    • 在你回答后我也使用了其他信号,但它们中的大多数也杀死了整个过程。你能给我举个例子来说明你的建议吗?我是线程新手,很难理解它们。
    • 一个例子可能太长了,这里就不解释了。您应该查看有关信号处理的教程或文档。有一个短的here
    • 您向哪个线程(是主父线程)发送信号?你发送信号的方法是什么?以编程方式还是在终端上使用 control+C?
    • 将信号发送到哪里取决于您想要实现的目标和您的上下文。例如,如果您想向应用程序发送信号以使其重新配置,则可以将该信号定向到应用程序。如果您希望某个特定线程停止,您应该向该线程发送信号,除非应用程序具有识别该线程的方法。在这些情况下,我通常使用kill 命令。
    • 最后我打开了一个新进程,posix_spawn 在一个线程中运行,必要时我使用int kill(pid,9) 用进程ID 杀死了它。谢谢大家的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2016-01-24
    相关资源
    最近更新 更多