bash脚本中的pgrep无法正常工作

时间:2015-03-12 11:09:55

标签: bash shell

以下是导致问题的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时它才会打印任何内容。

1 个答案:

答案 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的子进程的进程;如果你的过程没有产生任何孩子,它就不会打印任何孩子。