Bash子进程正在重复

时间:2014-11-03 13:40:25

标签: linux bash shell

我正面临一种行为,即在后台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 ...

有没有人知道为什么/如何发生?

1 个答案:

答案 0 :(得分:2)

这与shell无关;如果涉及bash,则新Java进程的父进程id将是24538,而不是24539.Java进程正在分叉。您必须查看代码才能了解原因。