相关疑难解决方法(0)

如何在Python中捕获SIGINT?

我正在开发一个启动多个进程和数据库连接的python脚本.我偶尔想用Ctrl+ C信号杀死脚本,我想做一些清理工作.

在Perl我会这样做:

$SIG{'INT'} = 'exit_gracefully';

sub exit_gracefully {
    print "Caught ^C \n";
    exit (0);
}
Run Code Online (Sandbox Code Playgroud)

我如何在Python中模拟这个?

python controls signals

504
推荐指数
9
解决办法
37万
查看次数

如何优雅地处理SIGTERM信号?

让我们假设我们有一个用python编写的这样一个简单的守护进程:

def mainloop():
    while True:
        # 1. do
        # 2. some
        # 3. important
        # 4. job
        # 5. sleep

mainloop()
Run Code Online (Sandbox Code Playgroud)

然后我们使用start-stop-daemon默认的send SIGTERM(TERM)信号进行守护--stop.

我们假设当前执行的步骤是#2.在这个时刻,我们正在发送TERM信号.

会发生什么是执行立即终止.

我发现我可以处理信号事件,signal.signal(signal.SIGTERM, handler)但问题是它仍然会中断当前执行并将控制传递给handler.

所以,我的问题是-它可以不中断当前执行,但处理TERM(?)在独立的线程信号,使我能够设置shutdown_flag = True,使mainloop()有机会停止正常?

python daemon sigterm start-stop-daemon

177
推荐指数
6
解决办法
13万
查看次数

标签 统计

python ×2

controls ×1

daemon ×1

signals ×1

sigterm ×1

start-stop-daemon ×1