dlang是否默认安装一些信号处理程序
Does dlang install some signal handlers by default
我有一个用 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) 编译器是否注册默认信号处理程序?如果是,为什么?另外,这是否记录在某处?
core.thread.thread_setGCSignals 的文档告诉我们,在 Posix 系统上,SIGUSR1 和 SIGUSR2 用于运行时控制挂起和恢复线程以进行 GC。
此功能允许您更改使用的信号,以防有您不需要的不同信号。
我有一个用 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) 编译器是否注册默认信号处理程序?如果是,为什么?另外,这是否记录在某处?
core.thread.thread_setGCSignals 的文档告诉我们,在 Posix 系统上,SIGUSR1 和 SIGUSR2 用于运行时控制挂起和恢复线程以进行 GC。
此功能允许您更改使用的信号,以防有您不需要的不同信号。