问题:如何检查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
,这些都无法正确评估答案 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
示例运行:
答案 2 :(得分:1)
你的主机操作系统是什么?
如果您有 / proc ,那么这可能适合您:
if [ -d "/proc/$pid" ]; then
echo "Running"
else
echo "Not running"
fi