Linux kill命令在执行之前

时间:2015-02-14 14:20:10

标签: linux centos command

我要做的是确保命令在执行之前没有运行(因此它不会自行复制)。我读到&&运算符应该在这里工作,因为它应该只在第一个命令没有输出任何错误时执行第二个命令,但在我的情况下它不执行命令。让我演示一下。

我们假设命令是./root/script 1 2 3,我要做的是运行以下命令:pkill -f './root/script 1 2 3' && ./root/script 1 2 3。 但最终发生的事情是,第二个命令根本没有被执行,或者第二个命令之后执行pkill命令,因此也会杀死它。无论哪种方式,我最终都没有运行命令。

你对这件事有什么意见吗?在执行命令之前,如何确保命令尚未运行?

提前致谢!

2 个答案:

答案 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。