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

iko*_*tia 3 linux signals d

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

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

void main()
{
  while(1){
    Thread.sleep(dur!("seconds")(1));
  };
}
Run Code Online (Sandbox Code Playgroud)

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

$ cat /proc/$PID/status | grep SigCgt
SigCgt: 0000000180000a00
Run Code Online (Sandbox Code Playgroud)

信号10是SIGUSR1信号,其默认动作是过程终止(咨询man 7 signal).

等效程序,C语言编写的关于终止kill -10 $PIDcat /proc/$PID/status | grep SigCgtSigCgt: 0000000000000000.

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

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

dha*_*nan 5

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

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