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

Bash:通过进一步的逻辑检查PID是否存在,bash,if-statement,centos,pid,Bash,If Statement,Centos,Pid,问题:如何检查PID是否存在,并在bash中的if语句中使用结果 我尝试过的事情 if [ "$(ps -p $pid)" -eq 0 ]; then echo "Running" else echo "Not Running" fi 无论我如何重定向STDOUT/STDER,这两个都不能正确计算 如何检查PID是否存在并在if语句中使用结果 您可以在变量中捕获输出,然后检查退出状态: output=$(ps -p "$pid") if [ "$?" -eq 0 ]; then e

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

我尝试过的事情

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

无论我如何重定向STDOUT/STDER,这两个都不能正确计算

如何检查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
你的主机操作系统是什么

如果您有/proc,则这可能适用于您:

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

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

#!/usr/local/bin/bash

if ps -p $1 > /dev/null;
then
echo "running"
else
echo "not running"
fi
示例运行:


目标Centos 6.5-6.7
#!/usr/local/bin/bash

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