Bash:检查PID是否存在进一步的逻辑

时间:2016-06-15 20:57:46

标签: bash if-statement centos pid

问题:如何检查PID是否存在并在bash的IF语句中使用结果?

我尝试过的事情

if [ "$(ps -p $pid)" -eq 0 ]; then 
 echo "Running"
else
 echo "Not Running"
fi
if [ "$(kill -0 $pid)" -eq 0 ]; then 
 echo "Running"
else
 echo "Not Running"
fi

无论我如何重定向STDOUT / STDER

,这些都无法正确评估

3 个答案:

答案 0 :(得分:3)

  

如何检查PID是否存在并在if语句中使用结果?

您可以捕获变量中的输出,然后检查退出状态:

output=$(ps -p "$pid")
if [ "$?" -eq 0 ]; then
  echo "Found"
  echo "$output"
fi

请记住,每次运行命令时$?都会重置,因此以下内容无效:

output=$(ps -p "$pid")
echo "$output"
# Now $? will be refering to the exit status of echo
if [ "$?" -eq 0 ]; then
  echo "Found"
fi

还可以在if语句中将所有内容粘贴在一起:

if output=$(ps -p "$pid")
then
  echo "Found: $output"
fi

答案 1 :(得分:2)

通过传递要检查的pid使其动态化:

#!/usr/local/bin/bash

if ps -p $1 > /dev/null;
then
echo "running"
else
echo "not running"
fi

示例运行:

enter image description here

答案 2 :(得分:1)

你的主机操作系统是什么?

如果您有 / proc ,那么这可能适合您:

   if [ -d "/proc/$pid" ]; then
      echo "Running"
   else
      echo "Not running"
   fi