D语言默认安装一些信号处理程序吗?

5

我有一个使用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 SigCgtSigCgt: 0000000000000000

等价的Rust程序在kill -10 $PID时也会中止运行,但其cat /proc/$PID/status | grep SigCgtSigCgt: 0000000180000440

我的问题是:D(Rust)编译器是否注册了默认的信号处理程序?如果是,为什么?还有,这个文档在哪里可以找到?

1个回答

7

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

这个函数允许你更改使用哪些信号,以防有不需要的不同信号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接