根据文档,exec不会修改进程的pid。
我使用一个服务来查看我的进程,并将他的pid保存在/var/run/中。为此,我用了$!
我的init脚本调用一个.sh文件,该文件对另一个.sh文件执行。然后对java进行exec调用。
最后,java应用程序的pid并不是我在init脚本中得到的。为什么?
注意:当我只创建一个执行exec java的sh脚本时,它就能工作了。但我不明白为什么增加一个主管会改变任何事情。
代码,如果它能帮助理解.
Init脚本:
$DAEMON > /var/local/red5/log/jvm.stdout 2>&1 &
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo $! > $PIDFILE
fi$DAEMON调用:
if [ -z "$RED5_HOME" ]; then export RED5_HOME=`pwd`; fi
ulimit -n 32767
# start Red5
exec /bin/bash $RED5_HOME/red5.sh > $RED5_HOME/log/jvm.stdout 2>&1 &我的red5.sh调用java:(在此之前有几个导出)
# start Red5
exec "$JAVA" "$JYTHON" -Dred5.root="${RED5_HOME}" $JAVA_OPTS -cp "${RED5_CLASSPATH}" "$RED5_MAINCLASS" $RED5_OPTS如果我这么做的话:
if [ -z "$RED5_HOME" ]; then export RED5_HOME=`pwd`; fi
ulimit -n 32767
# start Red5
exec "$JAVA" "$JYTHON" -Dred5.root="${RED5_HOME}" $JAVA_OPTS -cp "${RED5_CLASSPATH}" "$RED5_MAINCLASS" $RED5_OPTS结果:
知道吗?谢谢。
发布于 2014-05-02 13:10:01
当您将exec作为后台进程调用时,您的原始exec正在启动另一个新进程,因此您的exec程序确实在一个单独的进程中运行,而不是在init脚本中启动的后台进程。只需运行exec
if [ -z "$RED5_HOME" ]; then export RED5_HOME=`pwd`; fi
ulimit -n 32767
# start Red5
# CHANGE: no ampersand at the end of this line
exec /bin/bash $RED5_HOME/red5.sh > $RED5_HOME/log/jvm.stdout 2>&1发布于 2014-05-02 13:10:25
在追加&字符时,您可以在后台提交作业,从而得到它自己的新pid。
编辑:谢谢你的否决。我是说这句话:
exec /bin/bash $RED5_HOME/red5.sh > $RED5_HOME/log/jvm.stdout 2>&1 &https://stackoverflow.com/questions/23428763
复制相似问题