我有一个 shell 片段:
nohup sudo node server.js >> node.log 2>&1 &
if [ $? -eq 0 ]; then
echo $! $?
echo $! > pids
fi
我期望的是,如果node server.js
正常运行,那么将这个进程的pid记录到文件:pids。
但它不起作用,$?
始终为 0,因为它是 sudo 进程的状态?
而$!
也不是node
命令进程的pid。
那么如何在上面的shell脚本中得到node server.js
的正确返回码和pid呢?
最佳答案
我的最终解决方案:
#!/usr/bin/env bash
ROOT=$(cd `dirname $0`; pwd)
sudo kill -9 `cat ${ROOT}/pids` || true
nohup sudo node server.js >> node.log 2>&1 &
sleep 1
pid=$(ps --ppid $! | tail -1 | awk '{ print $1 }')
if echo $pid | egrep -q '^[0-9]+$'; then
echo $pid > ${ROOT}/pids
else
echo 'server not started!'
fi
关于linux - 从 nohup + sudo 获取 pid 和返回状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20716495/