关闭终端后停止高级Python调度器任务

2 投票
2 回答
2102 浏览
提问于 2025-04-18 05:15

背景

我使用高级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 来结束运行这个脚本的进程。

撰写回答