我需要每小时杀死我的python脚本,然后我需要重新启动它。我需要这样做,因为有时(我创建屏幕截图)浏览器窗口可能因为用户登录弹出窗口而挂起..无论如何。我创建了2个文件'reload.py'和'screenshot.py'。我通过cronjob运行reload.py。
我认为这样的事情会起作用
# kill process if still running
try :
os.system("killall -9 screenshotTaker");
except :
print 'nothing to kill'
# reload or start process
os.execl("/path/to/script/screenshots.py", "screenshotTaker")
问题是,我读到的execl的第二个参数(给定的进程名称)不起作用?如何为它设置进程名称以使kill执行它?
提前致谢!
答案 0 :(得分:1)
os.execl
的第一个参数是可执行文件的路径。其余参数将传递给该可执行文件,就好像它们在命令行中键入的位置一样。
如果你想让“screenshotTaker”成为流程的名称,那就是“screenshots.py”这样做的责任。你在那个剧本中做过那种特殊的事吗?
BTW,更常见的方法是跟踪(在/ var / run /中)正在运行的程序的PID。并通过PID杀死它。这可以通过Python完成(使用os.kill
)在系统级别,某些发行版具有用于此目的的帮助程序。例如,在Debian上有start-stop-daemon
。以下是 man 的摘录:
start-stop-daemon(8) dpkg utilities start-stop-daemon(8)
NAME
start-stop-daemon - start and stop system daemon programs
SYNOPSIS
start-stop-daemon [options] command
DESCRIPTION
start-stop-daemon is used to control the creation and termination of
system-level processes. Using one of the matching options,
start-stop-daemon can be configured to find existing instances of a
running process.