【问题标题】:What happens when SIGCANCEL is sent to a thread?当 SIGCANCEL 被发送到线程时会发生什么?
【发布时间】:2011-04-25 21:07:19
【问题描述】:

在多线程环境中,将 SIGCANCEL 发送到线程时会发生什么?

如果将 SIGKILL 发送到线程,行为会有什么不同?

【问题讨论】:

  • 我认为 Linux 根本不支持 SIGCANCEL。我知道它已被 POSIX 弃用。

标签: linux multithreading signals


【解决方案1】:

glibc pthread 实现中当前(内部)使用的SIGCANCEL 定义为__SIGRTMIN。

如果为取消类型设置为异步的线程调用pthread_cancel(),则通过tgkill() 发送__SIGRTMIN 将其关闭。

反过来,这可能意味着接收__SIGRTMIN 的线程的行为就像它被异步取消一样。 (我没有测试过)

【讨论】:

    【解决方案2】:

    就像 Travis 所说,SIGCANCEL 一直是 deprecated,并且在 POSIX 标准中不存在。

    【讨论】:

    • 在文件 glibc-2.9/nptl/pthread_cancel.c 中,我发现使用了 SIGCANCEL。因此我想知道它的功能。那么当你调用 pthread_cancel() 时究竟会发生什么?
    • @notytony 是的,它似乎仍然存在于 glibc 2.9 中,但是如果您查看内核手册页,it is not there。我没有使用 pthread 的经验,但这似乎不是您的标准信号。我阅读的少量文档表明它用于向与调用者处于同一进程中的线程发送信号。您可能希望将 pthread_cancel 与 pthread_kill 进行比较。
    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 2010-11-28
    • 2017-11-18
    • 1970-01-01
    • 2013-06-09
    • 2019-02-11
    • 2016-01-15
    • 1970-01-01
    相关资源
    最近更新 更多