我要做的是确保命令在执行之前没有运行(因此它不会自行复制)。我读到&&运算符应该在这里工作,因为它应该只在第一个命令没有输出任何错误时执行第二个命令,但在我的情况下它不执行命令。让我演示一下。
我们假设命令是./root/script 1 2 3
,我要做的是运行以下命令:pkill -f './root/script 1 2 3' && ./root/script 1 2 3
。
但最终发生的事情是,第二个命令根本没有被执行,或者第二个命令之后执行pkill命令,因此也会杀死它。无论哪种方式,我最终都没有运行命令。
你对这件事有什么意见吗?在执行命令之前,如何确保命令尚未运行?
提前致谢!
答案 0 :(得分:1)
pkill
的退出状态为1。这意味着如果没有./root/script 1 2 3
运行的实例,pkill
将返回一个非零退出状态,shell认为是false,并且命令在&&没有执行。
您可以按如下方式捕获:
(pkill -f './root/script 1 2 3' || [ $? -eq 1 ]) && ./root/script 1 2 3
$?
是pkill
调用的退出状态,因此测试pkill
是否返回0或1并在其中任何一种情况下运行./root/script 1 2 3
。
答案 1 :(得分:0)
杀死正在运行的脚本并不是最好的事情
许多程序在检查不存在后写入this_is_my_pid.tmp
文件开始。完成后,他们删除文件
当文件存在时,它们检查文件中的pid。