关闭终端后停止高级Python调度器任务
背景
我使用高级Python调度器(APScheduler)启动了几个任务,代码大概是这样的:
sched = Scheduler()
sched.start()
sched.add_interval_job(function, minutes=1)
sleep(10000)
sched.shutdown()
我是通过终端来执行这些操作的。
python script.py
问题
我本来希望这些任务能在关闭之前运行很多次。不幸的是,在它们的sleep
阶段,我不小心关闭了终端,导致这些任务没能通过sched.shutdown()
正确停止。
我觉得这些任务可能还在后台运行,因为我有证据表明,即使终端关闭后,function
这个功能仍然在被执行。
问题
有没有办法找出哪些任务还在后台运行,并把它们关闭呢?谢谢!
2 个回答
2
如果你像这样运行你的脚本:
python scrip.py
当你关闭终端时,python进程会被终止,所以你的脚本就会停止运行。
但是如果你用 & 运行你的脚本:
python scrip.py &
那么在你关闭终端后,进程就不会被终止,你可以通过
ps -e | grep python
来检查它。
你需要明白作业和系统进程之间的区别。关闭终端会终止进程。如果你想查看哪些作业还在运行,可以使用 print_jobs() 函数。
2
找到进程的ID,然后用 kill <PID>
来结束这个进程,或者直接用 pkill -f script.py
来结束运行这个脚本的进程。