python是不是脚本_检查Python脚本是否已经在运行

使用基于pgrep的方法确定python脚本是否正在运行是不可靠的。例如:> ps -ef | grep 'python sleep.py'

userid 21107 2069 0 12:51 pts/3 00:00:00 python sleep.py

userid 21292 2069 0 13:08 pts/3 00:00:00 grep python sleep.py

> pgrep 'python sleep.py'

>

根据运行的python脚本的名称识别它时的其他困难:实际的python字符串可能不同,具体取决于脚本的执行方式,例如,它可能如下所示:

/usr/bin/python2.7 sleep.py如果脚本是指向实际文件的符号链接,并且可以从两个位置执行,则使用os.path.abspath(__file__)方法在进程名中定位脚本可能会失败

示例:> cat abs_path.py

import os

print os.path.abspath(__file__)

> ls -l abs_path.py

lrwxrwxrwx 1 userid at 15 Apr 22 13:22 abs_path.py -> bin/abs_path.py

> python abs_path.py

/home/userid/abs_path.py

> python bin/abs_path.py

/home/userid/bin/abs_path.py进程(包括来自python脚本的进程)实际上可以在执行期间更改它们的名称(在脚本的情况下,可能不是真的)

我个人倾向于让脚本在一个独特的、众所周知的位置创建一个pidfile,在这个位置放置自己的pid。这使得确定可能已经在运行的进程的pid更加可靠。

在创建pidfile并可靠地写入self的pid时,仍然需要考虑竞争条件。通常,重新检查文件内容并在检测到不匹配时自杀足以确保至多存在一个正在运行的流程实例,而不管流程的实际名称如何。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值