我想创建一个bash脚本,它将检查foo是否已经在运行,如果没有,则运行它。
代码如下:
#!/usr/bin/env bash
function run {
if ! pgrep $1;
then
$@
fi
}
run foo执行脚本后,尽管foo已经在运行,但它还是启动了foo的另一个实例。
pgrep foo返回进程号,所以我可以让脚本先终止它,然后再启动foo,但我想知道这是否可以像上面描述的那样完成。这里我漏掉了什么?
发布于 2018-06-05 06:17:28
以下是一些改进:
function run {
if ! pgrep -x "$1" >/dev/null
then
"$@"
fi
}
run foo bar "baz qux"备注:
的进程相反,请使用-x pgrep选项来限制对名为"foo“的进程的搜索
您可以将其缩短为
run() { ! pgrep -x "$1" >/dev/null && "$@"; }我们可以编写pgrep -x "$1" >/dev/null || "$@",但是如果进程已经在运行,这将返回一个成功的退出状态,我认为如果进程不能启动,返回一个失败状态会更有意义。
https://stackoverflow.com/questions/50689078
复制相似问题