linux - dlang 是否默认安装一些信号处理程序
问题描述
我有用 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 目的。
此功能允许您更改使用的信号,以防您不需要不同的信号。
推荐阅读
- javascript - 如何更改 Loopback API Explorer 标头颜色和名称?
- r - R - 根据另一列的第一次出现修改列值
- python - Django - 将 URL 作为 URL 参数传递
- excel - Excel VBA 合并数据并删除
- pyspark - 如何在 Pyspark 中进行交叉验证后获得最佳超参数值?
- spring-mvc - 尝试在spring-mvc上的应用程序中注册配置时出错?
- r - 在 r 中融化 data.frame 并将未使用的列存储在列中(用逗号分隔)
- python - Opencv 视频分析音频文件
- json - 如何使用请求模块在 Node.JS 中将发布请求与 JSON 数据一起发送到文件
- javascript - 如何在openlayers 4.x中获取多边形内的所有点?