击子是越来越重复

问题描述:

我面对一个行为,其中即在后台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 ... 

没有人有任何想法,为什么/它是如何发生的?

这与壳无关;如果涉及bash,新Java进程的父进程id将是24538,而不是24539.Java进程本身是分叉的。您必须查看代码才能看到原因。

+0

是Chepner,这是我的第一个想法,但是这个Java代码并没有做任何事情可以分叉自己。它只运行一个OSGI lib代码(没有任何线程),阻塞直到start.sh被杀死或OSGI收到一个“退出”命令,然后java进程“优雅地”完成,并且后台bash子进程也被阻塞。 – RLM 2014-11-03 14:13:09

+1

您可以尝试使用'strace'运行Java进程来查看它调用fork的位置。 – chepner 2014-11-03 14:26:31

+0

现在我无法运行strace,导致进程被冻结,即使我重新启动它,我们也不知道什么时候会发生。不过谢谢你的建议。 – RLM 2014-11-03 18:43:18