我正面临一种行为,即在后台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 ...
有没有人知道为什么/如何发生?
答案 0 :(得分:2)
这与shell无关;如果涉及bash
,则新Java进程的父进程id将是24538,而不是24539.Java进程正在分叉。您必须查看代码才能了解原因。