如果PID正在运行,则每隔X秒检查一次Shell脚本

时间:2014-05-10 15:20:56

标签: bash shell pid

我必须创建一个Shell脚本,如果PID(进程标识符)正在运行,则每X秒检查一次。它必须使用此终端命令运行:

$ script [PID] [SECONDS]

我写了这个,但它不起作用:

#!/bin/bash

read -a PID
read -a SECONDS

while(true)

    if [kill -s 0 $PID]
        then
            echo "PID $PID is running"
        exit 0;
    else
            echo "PID $PID is not running"

sleep $SECONDS

有人可以告诉我问题在哪里吗?

3 个答案:

答案 0 :(得分:2)

watch,特别是-g选项,如果重复命令的输出发生变化,watch会退出。

除此之外,Mat说的是什么。你对Bash的掌握似乎......需要更多的训练。

答案 1 :(得分:0)

有一种更好的方法可以检查具有特定PID的进程是否正在运行,而不是使用kill。而是检查/ proc。

中是否存在等效目录
#!/bin/bash

if [ $# != 2 ]; then
  echo "Usage: $(basename $0) <PID> <Seconds>"
  exit 1
fi

while true; do
  if [ -d /proc/$1 ]; then
    echo "PID $1 is running"
  else
    echo "PID $1 is not running"
  fi

  sleep $2
done

答案 2 :(得分:0)

pgrep效果也很好。它返回与提供的模式

匹配的进程的PID
pgrep $proc_name > /dev/null
if [ $? -ne 0 ]; then
    echo "$proc_name doesn't exist"
fi