Bash: 如何检查进程ID是否存在并进行进一步处理

4

问题:如何在bash中检查PID是否存在并在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个回答

4
如何检查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

3

通过传递您想要检查的pid,使其具有动态性:

#!/usr/local/bin/bash

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

示例运行:

在此输入图片描述


2

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

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

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

目标为Centos 6.5-6.7 - stackoverflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接