从systemd启动时进程崩溃

时间:2017-01-21 09:31:29

标签: crash systemd

我正在尝试从systemd启动Process-A。 在Process-A中,它使用popen启动另一个进程-B。

如果从命令行启动Process-A,则Process-B会正确启动。

当从systemd启动Process-A时,Process-B在从Process-A开始后很快就会崩溃

systemd[1]: Received SIGCHLD from PID 770 (process-B).
systemd[1]: Child 770 (process-B) died (code=dumped, status=11/SEGV)

是否需要在systemd服务文件中添加任何配置? 目前只有ExecStart添加了Process-A的路径。

2 个答案:

答案 0 :(得分:0)

任何时候从CLI运行而不是从systemd运行,有几种可能性。

  1. 不同的环境变量。您可以让systemd-run服务转储出环境变量,以查看它们是否符合您的预期。特别是将PATH变量与您期望的路径进行比较。
  2. 资源限制。有关可能限制资源消耗的配置值,请参阅--force。使用man systemd.resource-control检查影响您尝试启动的服务的完整配置值。
  3. 在您的情况下,您还可以analyze the core dump更好地了解导致程序崩溃的原因。

    系统在具有资源控制的一致环境中运行代码是一项功能。从长远来看,这有助于获得可重现的稳定结果,而不会使硬件过载。

答案 1 :(得分:0)

好的,我的进程-A的实际问题是它在启动期间与另一个进程-C有某种依赖关系,并从另一个进程C中获取一些输入,这通常在启动期间是垃圾。在启动期间通过Systemd启动时,此垃圾输入是崩溃的原因。稍后手动启动时输入值有效,这就是为什么没有崩溃。

感谢您的帮助。 @Mark Stosberg提到的要点对调试系统相关的错误也很有用。

如有任何问题,请告知。 见你。