【极简】什么是守护进程

声明:

参考材料:https://zhuanlan.zhihu.com/p/53212013
以及在这里插入图片描述

是什么

守护进程是终端不能控制的进程,不受终端信号控制。ctrl+Z、ctrl+C等不会影响到这个进程。
比如带了-D选项的gunicorn:gunicorn -D main:app

实现方式

底层是Linux的setsid命令。 setsid函数将创建新的会话,并使得调用setsid函数的进程成为新会话的领头进程。就类似于新开一个terminal,用新的terminal生成新的进程,然后使得这个进程又脱离掉这个新开终端,使得其父母进程“消失”(但实际好像是交给init进程托管了?)。

控制

那要控制怎么办?还是可以控制的。

  1. 停止
    需要查看那个守护进程的id号,pstree -ap|grep gunicorn
    找到后,输入如下指令关闭进程:
    kill -9 pid
    kill -9和普通kill的区别? 普通kill是软的,告诉进程该停止了,而进程有自主选择权,可以忽略,-9加上后,即可死亡,没有其他选择。

  2. 重启
    输入如下指令重启进程:
    kill -HUP pid HUP是“更改配置而不需停止并重新启动服务”。

其他相关命令

前台进程:就普通的进程,开始后会占住终端一直运行,ctrl+C结束运行。比如apt-get install等等。

后台进程:基本上是加了&符号的,比如python xxx.py&,开了后就在后台运行,可以使用fg (foreground)调到终端前台来。

加了nohup进程:当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。nohup能够屏蔽此信号,不会中断,一般用来挂到后台去等结果。比如模型训练:nohup python xxx.py&

以上进程都不是守护进程(daemon)。

错误、无营养无意义的帖子如下:

以及其他很多。

猜你喜欢

转载自blog.csdn.net/Yonggie/article/details/131912984