Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确保bash脚本不是';你还没跑吗继续的_Bash - Fatal编程技术网

如何确保bash脚本不是';你还没跑吗继续的

如何确保bash脚本不是';你还没跑吗继续的,bash,Bash,继续从 并表示歉意: 在最后一个解决方案中,“ps”是否足以显示所有正在运行的进程,还是应该是“ps-ef” 很抱歉,我没有足够的权限向上一个问题添加评论。您可以通过以下方式找到此脚本: ps ax | grep scriptname如果需要进一步澄清,应在答案下方添加注释。这不应该是一个新问题。flock解决方案更好,ps版本充满了竞争条件。ps是否足够取决于您需要的排他性,如果它需要在用户/会话之间具有排他性,那么,是的,您需要ps-e/ps a。另请注意,ps是最依赖于系统的命令之一,即p

继续从 并表示歉意: 在最后一个解决方案中,“ps”是否足以显示所有正在运行的进程,还是应该是“ps-ef”


很抱歉,我没有足够的权限向上一个问题添加评论。

您可以通过以下方式找到此脚本:
ps ax | grep scriptname

如果需要进一步澄清,应在答案下方添加注释。这不应该是一个新问题。flock解决方案更好,ps版本充满了竞争条件。ps是否足够取决于您需要的排他性,如果它需要在用户/会话之间具有排他性,那么,是的,您需要ps-e/ps a。另请注意,ps是最依赖于系统的命令之一,即ps提供的输出在Solaris、Linux和AIX上可能非常不同,因此如果这与您相关,请记住这一点。我想我理解“竞争条件”场景,我怀疑它是否适用。在我尝试运行脚本之前,我只需要确保没有其他人运行过该脚本。@AndyKendall,然后您需要使用某种类型的锁定,例如,符号链接就可以了(例如,在脚本开始时创建符号链接,设置陷阱以在终止时删除符号链接)。创建符号链接是一项原子操作(在大多数FSE上)。要直接回答您的问题:如果您想用
ps
来做得不好,并且只关心同一用户运行的其他实例,那么仅使用
ps
就足够了。如果您关心其他用户运行的实例,是的,您需要添加一些参数。但是,无论如何,如果您确实需要脚本可靠且正确地运行,则根本不要依赖于
ps
——使用
flock
。使用此命令,即使grep找到了“scriptname”,也不意味着脚本正在运行。示例:它刚用“vim scriptname”打开。