让我们假设我们有一个用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()有机会停止正常?
我不是在询问使用码头工人的主管,而只是想让我的理解得到验证.
我知道docker在运行时会运行一个进程.此外,当我们需要在容器内运行多个进程时,使用supervisor.
我看过几个例子,其中一个容器是从基本映像启动的,并且安装了几个服务,并且容器被提交以形成一个新的映像,所有这些都没有supervisor.
所以,我的基本疑问是两种方法之间的区别.
我的理解是当docker容器停止时它向PID进程发送一个kill信号,PID 1管理子进程并停止所有的子进程,这正是supervisor所做的,而我们可以安装多个进程而不需要supervisor 发出docker run时可以运行进程,当容器停止时,只有PID 1发送信号,其他正在运行的进程不会正常停止.
请确认我对使用supervisord的理解是否正确.
谢谢
我在java中有一个应用程序,它是永久性的.按如下方式执行:
nohup ant> log.txt &
Run Code Online (Sandbox Code Playgroud)
问题是最后无限期地,应用程序退出并收到消息"退出143".