![Java 进程在 Redhat 中被 Systemd 的 SIGTERM 终止](https://linux22.com/image/222652/Java%20%E8%BF%9B%E7%A8%8B%E5%9C%A8%20Redhat%20%E4%B8%AD%E8%A2%AB%20Systemd%20%E7%9A%84%20SIGTERM%20%E7%BB%88%E6%AD%A2.png)
我正在使用 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 单元。