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

时间:2018-07-11 23:26:20

标签: linux signals d

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

1 个答案:

答案 0 :(得分:5)

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

此功能允许您在不需要其他信号的情况下更改使用的信号。