如何确定进程是否正在运行,然后让 bash 脚本根据该条件执行一些内容?
例如:
如果进程abc
正在运行,请执行此操作
如果它没有运行,请执行此操作。
Joh*_*nac 200
执行类似操作的 bash 脚本如下所示:
#!/bin/bash
# Check if gedit is running
# -x flag only match processes whose name (or command line if -f is
# specified) exactly match the pattern.
if pgrep -x "gedit" > /dev/null
then
echo "Running"
else
echo "Stopped"
fi
Run Code Online (Sandbox Code Playgroud)
这个脚本只是检查程序“gedit”是否正在运行。
或者您只能检查程序是否没有像这样运行:
if ! pgrep -x "gedit" > /dev/null
then
echo "Stopped"
fi
Run Code Online (Sandbox Code Playgroud)
gei*_*rha 37
任何使用类似ps aux | grep abc
或pgrep abc
有缺陷的解决方案。
因为您没有检查特定进程是否正在运行,所以您正在检查是否有任何正在运行的进程恰好匹配abc
. 任何用户都可以轻松创建和运行名为abc
(或abc
在其名称或参数中包含某处)的可执行文件,从而导致测试误报。有可应用于各种选项ps
,grep
并pgrep
以缩小搜索范围,但你仍然不会得到一个可靠的测试。
这取决于您需要测试的目的。
这就是 systemd 的用途。它可以自动启动服务并跟踪它,它可以在它死亡时做出反应。
请参阅如何检查我的游戏服务器是否仍在运行...以获取其他解决方案。
在这种情况下,请使用锁定文件或锁定目录。例如
#!/usr/bin/env bash
if ! mkdir /tmp/abc.lock; then
printf "Failed to acquire lock.\n" >&2
exit 1
fi
trap 'rm -rf /tmp/abc.lock' EXIT # remove the lockdir on exit
# rest of script ...
Run Code Online (Sandbox Code Playgroud)
有关其他锁定方式,请参阅Bash FAQ 45。
Zuu*_*uul 20
这是我使用的:
#!/bin/bash
#check if abc is running
if pgrep abc >/dev/null 2>&1
then
# abc is running
else
# abc is not running
fi
Run Code Online (Sandbox Code Playgroud)
通俗地说:如果 'pgrep' 返回 0,则进程正在运行,否则不运行。
相关阅读:
Bash 脚本 ::字符串比较
Ubuntu 手册pgrep
归档时间: |
|
查看次数: |
355926 次 |
最近记录: |