Shell

當我殺死主管時,如何確保主管工作的子程序死亡

  • November 19, 2020

我的應用程序是一個需要一些環境變數的 jar 文件。我將所有環境變數放在一個文件中,如下所示:

export VAR=value
export VAR2=value2
#....etc

我的主管配置文件如下所示:

[program:programname]
command=bash -c "source /path/to/env/file && java -jar /path/to/jar.jar"

ps -ef | grep programname在兩條單獨的行上顯示了兩個程序:一個是bash -c "source blah && java blah",另一個是java blah

現在,問題來了:無論是我supervisorctl stop programname還是service supervisor stopkill -9 whatever the supervisor pid is至,第一個程序都死了,但是正常的 java 程序仍然存在並成為孤立的,現在父 pid 為 1。如何在不手動殺死 jar 的情況下使 jar 死掉?

用於exec替換:bash_java

[program:programname]
command=bash -c "source /path/to/env/file && exec java -jar /path/to/jar.jar"

在這種情況下,您將只有一個要殺死的程序。

將命令改為一個用 java? 替換自身的 shell 腳本?

#!/bin/bash
source /i/pity/da/env/foo
exec java ...

引用自:https://unix.stackexchange.com/questions/287474