相关疑难解决方法(0)

如何优雅地处理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万
查看次数

在码头工人中使用主管

我不是在询问使用码头工人的主管,而只是想让我的理解得到验证.

我知道docker在运行时会运行一个进程.此外,当我们需要在容器内运行多个进程时,使用supervisor.

我看过几个例子,其中一个容器是从基本映像启动的,并且安装了几个服务,并且容器被提交以形成一个新的映像,所有这些都没有supervisor.

所以,我的基本疑问是两种方法之间的区别.

我的理解是当docker容器停止时它向PID进程发送一个kill信号,PID 1管理子进程并停止所有的子进程,这正是supervisor所做的,而我们可以安装多个进程而不需要supervisor 发出docker run时可以运行进程,当容器停止时,只有PID 1发送信号,其他正在运行的进程不会正常停止.

请确认我对使用supervisord的理解是否正确.

谢谢

supervisord docker

33
推荐指数
2
解决办法
2万
查看次数

总是应用Java结束"退出143"Ubuntu

我在java中有一个应用程序,它是永久性的.按如下方式执行:

nohup ant> log.txt &
Run Code Online (Sandbox Code Playgroud)

问题是最后无限期地,应用程序退出并收到消息"退出143".

java ubuntu exit

11
推荐指数
2
解决办法
5万
查看次数

标签 统计

daemon ×1

docker ×1

exit ×1

java ×1

python ×1

sigterm ×1

start-stop-daemon ×1

supervisord ×1

ubuntu ×1