【问题标题】:Get PID of backround process lauched as other users获取作为其他用户启动的后台进程的PID
【发布时间】:2015-11-24 17:58:35
【问题描述】:

我正在尝试存储需要以非 root 用户身份启动的后台进程的 PID。

当我执行下面的脚本时,PID 文件被创建但保持为空。

USER=myuser
PROG=/path/to/service
PROG_ARGS=""
PIDFILE=/var/run/$NAME.pid 

su $USER -c "python2.7 $PROG $PROG_ARGS &"    
echo $! > $PIDFILE

我试图将& 放在su 命令之外,就像su $USER -c "python ..." & 一样,自从我得到一个PID 后它几乎可以工作,但它总是在我的实际进程之前的那个(例如:如果我的python PID是 3101,保存的 PID 将是 3100)。我怀疑这是启动 python 脚本的 shell 的 PID。

我的问题是,如何以特定用户身份启动我的 python 脚本并同时保存 PID?

我正在运行 RHLE 6。

【问题讨论】:

    标签: linux bash service pid


    【解决方案1】:

    后台进程是在su启动的子shell中创建的,所以需要在那里捕获$!。

    su $USER -c "python2.7 $PROG $PROG_ARGS & echo \$! > $PID_FILE"
    

    【讨论】:

    • 只需要授予写PID_FILE的权限,它就可以工作,谢谢。 chmod o+rw /var/run
    猜你喜欢
    • 2010-11-05
    • 2012-02-27
    • 2011-09-06
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2023-03-18
    相关资源
    最近更新 更多