service 是被 systemd 启动的,可是在 servrice 进入 loop 的时候,被 /lib/systemd/systemd kill 了。我为什么知道是被 systemd kill 了呢?因为我用 strace 命令追踪了它的系统调用。发现它向 service 发送了 SIGTERM 信号。如果用 systemctl start 重启,又会被杀。可是我如果手动键入命令行重启,就正常了。
老实说,以前只是粗浅了解过 systemd. 难道 systemd 发现了什么异常情况然后想杀掉 service?比如内存使用过多?因为我看启动 log 提示代码中有 calloc()函数分配失败的情况。不过由于代码过于庞大,目前还没有找到是哪里调用的 calloc () 。网上搜索了一下,发现 systemd 限制内存似乎要看 /sys/fs/cgroup/memory/system.slice/。可是我系统上连 /sys/fs/cgroup/memory 都不存在。