1
我面對一個行爲,其中即在後臺bash的子進程運行(parentesis和&之間)代碼正在有時,顯然,叫了兩聲:擊子是越來越重複
是這樣的話:
# script start.sh
#!/bin/bash
echo "Starting ..."
(
java -server ...
ret=$?
log "Process has stopped returning: [$ret]"
exit $ret
) &
在正常情況下,在運行start.sh腳本,兩個處理將被創建,一個用於start.sh本身和其他的背景的bash子(java程序):
#> ps -ef | grep ^user
user 24538 1 0 Oct22 ? 00:00:00 /bin/bash start.sh
user 24539 24538 2 Oct22 ? 06:20:56 java -server ...
但是,幾天後一個新的Java程序,即24539個進程(Java)的兒童,正在形成:
#> ps -ef | grep ^user
user 24538 1 0 Oct22 ? 00:00:00 /bin/bash start.sh
user 24539 24538 18 Oct22 ? 06:20:56 java -server ...
user 25888 24539 2 Oct25 ? 00:00:00 java -server ...
沒有人有任何想法,爲什麼/它是如何發生的?
是Chepner,這是我的第一個想法,但是這個Java代碼並沒有做任何事情可以分叉自己。它只運行一個OSGI lib代碼(沒有任何線程),阻塞直到start.sh被殺死或OSGI收到一個「退出」命令,然後java進程「優雅地」完成,並且後臺bash子進程也被阻塞。 – RLM 2014-11-03 14:13:09
您可以嘗試使用'strace'運行Java進程來查看它調用fork的位置。 – chepner 2014-11-03 14:26:31
現在我無法運行strace,導致進程被凍結,即使我重新啓動它,我們也不知道什麼時候會發生。不過謝謝你的建議。 – RLM 2014-11-03 18:43:18