首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用exec修改PID?

如何用exec修改PID?
EN

Stack Overflow用户
提问于 2014-05-02 12:57:40
回答 2查看 1.6K关注 0票数 1

根据文档,exec不会修改进程的pid。

我使用一个服务来查看我的进程,并将他的pid保存在/var/run/中。为此,我用了$!

我的init脚本调用一个.sh文件,该文件对另一个.sh文件执行。然后对java进行exec调用。

最后,java应用程序的pid并不是我在init脚本中得到的。为什么?

注意:当我只创建一个执行exec java的sh脚本时,它就能工作了。但我不明白为什么增加一个主管会改变任何事情。

代码,如果它能帮助理解.

Init脚本:

代码语言:javascript
复制
$DAEMON > /var/local/red5/log/jvm.stdout 2>&1 &
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
        echo $! > $PIDFILE
fi

$DAEMON调用:

代码语言:javascript
复制
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:(在此之前有几个导出)

代码语言:javascript
复制
# start Red5
exec "$JAVA" "$JYTHON" -Dred5.root="${RED5_HOME}" $JAVA_OPTS -cp "${RED5_CLASSPATH}" "$RED5_MAINCLASS" $RED5_OPTS

如果我这么做的话:

代码语言:javascript
复制
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

结果

  1. pid通过ps -ef: 15950。
  2. pid值$!:15947

知道吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-02 13:10:01

当您将exec作为后台进程调用时,您的原始exec正在启动另一个新进程,因此您的exec程序确实在一个单独的进程中运行,而不是在init脚本中启动的后台进程。只需运行exec

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2014-05-02 13:10:25

在追加&字符时,您可以在后台提交作业,从而得到它自己的新pid。

编辑:谢谢你的否决。我是说这句话:

代码语言:javascript
复制
exec /bin/bash $RED5_HOME/red5.sh > $RED5_HOME/log/jvm.stdout 2>&1 &
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23428763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档