【问题标题】:Does dlang install some signal handlers by defaultdlang 是否默认安装一些信号处理程序
【发布时间】:2018-07-11 23:26:20
【问题描述】:

我有用 D 编写的无限循环程序:

$ cat dprog.d 
import std.stdio;
import core.thread;

void main()
{
  while(1){
    Thread.sleep(dur!("seconds")(1));
  };
}

当我在 Linux (Ubuntu) 上构建和运行这个程序时,kill -10 $PID 对它没有任何影响。事实上,它默认会捕获一堆信号:

$ cat /proc/$PID/status | grep SigCgt
SigCgt: 0000000180000a00

信号 10 是一个SIGUSR1 信号,其默认操作是进程终止(咨询man 7 signal)。

用 C 编写的等效程序在 kill -10 $PID 上终止,其 cat /proc/$PID/status | grep SigCgtSigCgt: 0000000000000000

用 Rust 编写的等效程序也终止于 kill -10 $PID,但它的 cat /proc/$PID/status | grep SigCgtSigCgt: 0000000180000440

我的问题是:D (Rust) 编译器是否注册了默认信号处理程序?如果是,为什么?另外,这是否记录在某处?

【问题讨论】:

    标签: linux signals d


    【解决方案1】:

    core.thread.thread_setGCSignals 的文档告诉我们,在 Posix 系统上,SIGUSR1 和 SIGUSR2 用于运行时以控制挂起和恢复线程以用于 GC。

    此功能允许您更改使用哪些信号,以防有不同的信号您不需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2011-08-15
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多