获取以其他用户身份启动的后台进程的 PID

Get PID of backround process lauched as other users

我正在尝试存储我需要以非根用户身份启动的后台进程的 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.

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

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