【发布时间】:2014-12-23 19:56:00
【问题描述】:
继续Shell script: Ensure that script isn't executed if already running 并道歉: 在最后一个解决方案中,“ps”是否足够,或者应该是“ps -ef”来显示所有正在运行的进程?
抱歉,我没有足够的权限为上一个问题添加评论。
【问题讨论】:
-
如果您需要进一步说明,您应该在答案下方添加评论。这不应该是一个新问题。
-
flock 解决方案更好,ps 版本充满了竞态条件。 ps 是否足够取决于您需要的排他性,如果它需要跨用户/会话排他,那么,是的,您需要 ps -e/ ps a。还要注意 ps 是最依赖于系统的命令之一,即 ps 给出的输出在 Solaris 到 Linux 到 AIX 上可能有很大不同,所以如果这与您相关,请记住这一点。
-
我想我理解“竞争条件”场景,但我怀疑它是否适用。在我尝试之前,我只需要确保没有其他人运行过该脚本。
-
@AndyKendall,那么您需要使用某种锁定,例如符号链接可以(例如,在脚本开头创建符号链接,设置陷阱以在终止时删除符号链接)。创建符号链接是一个原子操作(在大多数 FS 上)。
-
直接回答您的问题:如果您想用
ps做得不好,并且只关心由同一用户运行的其他实例,那么单独使用ps就足够了。如果您关心其他用户运行的实例,是的,您需要添加一些参数。但是,无论如何,如果您确实需要脚本可靠且正确地运行,则根本不要依赖ps——使用flock。
标签: bash