我用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 $PID其cat /proc/$PID/status | grep SigCgt是SigCgt: 0000000000000000.
用Rust编写的等效程序也会终止kill -10 $PID,但它cat /proc/$PID/status | grep SigCgt是SigCgt: 0000000180000440.
我的问题是:D(Rust)编译器是否注册了默认的信号处理程序?如果是,为什么?此外,这是在某处记录的吗?
core.thread.thread_setGCSignals的文档告诉我们,在Posix系统上,SIGUSR1和SIGUSR2用于运行时控制挂起和恢复线程以用于GC.
此功能允许您更改使用的信号,以防您有不同的信号.