以下是导致问题的shell脚本代码。
LOG_FILE="/home/sample.log"
PID_FILE="/home/sample.pid"
sudo -u user1 trinidad -e production > "$LOG_FILE" 2>&1 & echo $! > "$PID_FILE"
PARENT_PID=`cat "$PID_FILE"`
pgrep -P "$PARENT_PID" > "$PID_FILE"
但是这里的最后一个命令不会向PID_FILE打印任何内容。因此,出于调试目的,我尝试回显echo $PARENT_PID
。它正确打印输出,如1234。
同样在shell脚本中如果我pgrep -P 1234
,那么它也会正确打印子进程,但只有当我执行pgrep -P $PARENT_PID
时它才会打印任何内容。
答案 0 :(得分:0)
您正在将内容写入文件,然后重新读取文件。虽然这只是浪费,实际上并不是对您的问题的解释,但我会重构
LOG_FILE="/home/sample.log"
PID_FILE="/home/sample.pid"
sudo -u user1 trinidad -e production > "$LOG_FILE" 2>&1 &
PARENT_PID=$!
pgrep -P "$PARENT_PID" > "$PID_FILE"
我猜测你的实际问题是sudo
进程没有产生任何孩子。 pgrep -P
的操作是打印作为您指定的PID的子进程的进程;如果你的过程没有产生任何孩子,它就不会打印任何孩子。