Shell
當我殺死主管時,如何確保主管工作的子程序死亡
我的應用程序是一個需要一些環境變數的 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 stop
什kill -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 ...