我正在使用 nohup 和 & 启动一个 Java 进程(在后台运行它)。此进程经常被终止。没有关于何时终止的模式。从应用程序(java 进程)日志可以明显看出它正在接收 SIGTERM 信号。于是我用 strace 找出了 SIGTERM 信号的来源,结果发现是系统。
为什么 systemd 会尝试终止它不管理的进程?
跟踪输出
13:35:20.838755 futex(0x7f1ef1ae49d0, FUTEX_WAIT, 16917, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
22:17:17.211643 --- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=1, si_uid=0} ---
22:17:17.211876 futex(0x7f1ef0e9c720, FUTEX_WAKE_PRIVATE, 1) = 1
22:17:17.211974 rt_sigreturn({mask=[]}) = 202
22:17:17.212183 futex(0x7f1ef1ae49d0, FUTEX_WAIT, 16917, NULL) = ?
22:17:17.538874 +++ exited with 143 +++
我已经梳理了 DMESG 和消息日志,没有任何内容表明进程被终止的原因。
编辑:java 进程由用户作为 bash 命令启动。但用户登录是使用 pblocald 控制的,pblocald 是一个 systemd 单元。