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

Bash : Check if PID exists with further logic

问题:如何检查 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

How do you check if a PID exists and use the result within an if statement?

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

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

你的主机是什么OS?

如果你有 /proc 那么这可能对你有用:

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

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

#!/usr/local/bin/bash

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

示例运行: