我有一个使用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
Signal 10是SIGUSR1
信号,其默认操作是进程终止(请查看man 7 signal
)。
等价的C程序在kill -10 $PID
时中止运行,其cat /proc/$PID/status | grep SigCgt
为SigCgt: 0000000000000000
。
等价的Rust程序在kill -10 $PID
时也会中止运行,但其cat /proc/$PID/status | grep SigCgt
为SigCgt: 0000000180000440
。
我的问题是:D(Rust)编译器是否注册了默认的信号处理程序?如果是,为什么?还有,这个文档在哪里可以找到?