gpt4 book ai didi

linux - pidof -x $0 返回 2 而不是预期的 1,是否有单行替代方案?

转载 作者:太空狗 更新时间:2023-10-29 11:18:51 25 4
gpt4 key购买 nike

在 bash 脚本中,我尝试使用以下行来确定是否有另一个进程正在执行当前脚本:

/sbin/pidof -x $0 |wc -w

但响应始终为 2,而不是预期值 1。

我尝试了以下调用:
/sbin/pidof -x $0 返回 1 pid
/sbin/pidof -x $0 |wc -w 返回 2
/sbin/pidof -x $0 |head 返回 2 个 pids
/sbin/pidof -x $0 |head |wc -w 返回 2
/sbin/pidof -x $0 |head |tail 返回 2 个 pids
/sbin/pidof -x $0 |head |tail |wc -w 返回 2

任何人都可以提出替代方案(或修复)来实现我正在尝试做的事情,并解释为什么将输出通过管道传输到任何东西会导致 pidof 输出变得“有点滑稽”?


这是脚本当前使用 pidof 的方式,效果很好:

RUNNING=`/sbin/pidof -x $0`
RUNNING=`echo -n ${RUNNING} | wc -w`
[[ ${RUNNING} -gt 1 ]] && return

最佳答案

如果您只是想阻止第二个运行的脚本,则以下方法可以解决问题:

pid=/tmp/$(basename $0).pid
[ -e $pid ] && exit 0;
trap 'rm -f $pid >/dev/null 2>&1;' 0
trap 'exit 2' 1 2 3 15
touch $pid

只需使用这些行开始您的脚本。基本上它会检查文件并在文件存在时停止执行。请注意,如果您终止 (-9) 正在运行的脚本,您将负责清理创建的 pid 文件。 Kill (-9) 绕过 shell 陷阱,否则会清理 pid 文件。

关于linux - pidof -x $0 返回 2 而不是预期的 1,是否有单行替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27125536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com