dlang是否默认安装一些信号处理程序

Does dlang install some signal handlers by default

我有一个用 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) 编译器是否注册默认信号处理程序?如果是,为什么?另外,这是否记录在某处?

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

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