【发布时间】: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 SigCgt 为 SigCgt: 0000000000000000。
用 Rust 编写的等效程序也终止于 kill -10 $PID,但它的 cat /proc/$PID/status | grep SigCgt 是 SigCgt: 0000000180000440。
我的问题是:D (Rust) 编译器是否注册了默认信号处理程序?如果是,为什么?另外,这是否记录在某处?
【问题讨论】: