LINUX守护进程

Posted 笑花大王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX守护进程相关的知识,希望对你有一定的参考价值。

守护进程(deamon)就是一直在后台运行的进程(daemon)
前台任务(foreground job)
后台任务(background job)
fg 将后台中的命令调至前台继续运行
bg 将一个在后台暂停的命令,变程继续执行(在后台执行)
ctrl+z 讲一个正在前台执行的命令放到后台,并且处于暂停转台,布尔执行
linux启动后台任务
在要启动的程序后面加上&,这样启动的程序就会变成"后台任务"
python elk.py &
后台任务特点
1.继承当前session(对话)的标准输出(stdout)和标准错误(stderr),因此后台任务所有输出依然会同步地在命令下显示
2.不在继承当前session的标准输入(stdin)。你无法向这个任务输入指令了。如果它视图读取标准输入,就会暂停执行(halt)

SIGHUP信号

正常前台程序退出
1.用户准备推出session
2.系统向该session发出SIGHUP信号
3.session将SIGHUP信号发给所有子进程
4.子进程收到SIGHUP信号后,自动退出
可以查看shell的huponexit参数
shopt |grep huponexit
默认是off关闭的 所以session退出的时候不会把SIGHUP信号发给 后台任务 所以 一般后台任务不会随着session一起退出。

disown命令

如果系统的huponexit参数是打开的on 可以使用disown这个命令 他可以将制定任务从 后台任务列表(jobs命令的返回结果)之中移出 一个后台任务只要不在这个列表中,session就不会向它发出SIGHUP信号
执行之后elk.py进程就被移出后台任务列表了,jobs输出结果里不会有这个进程
python elk.py &
disown
disown用法
disown //移出最近一个正在执行的后台任务
disown -r//移出所有正在执行的后台任务
disown -a  //移出所有后台任务
disown -h //不移出后台,但是让它们不会接收到SIGHUP信号
//根据jobId,移出指定的后台任务
disown %2
disown -h %2

标准I/O

使用disown命令 退出session 如果后台进程与表准I/O有交互会挂掉
nohup命令
nohup python elk.py &
nohup功能
1.阻止SIGHUP信号发送到这个进程
2.关闭标准输入,该进程不再能够接收任何输入,即使运行在前台
3.重定向标准输出和标准错误到文件nohup.out
这个命令将子进程与它的session分离了
参考学习:

以上是关于LINUX守护进程的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统中的守护进程讲解

Linux系统之守护进程和计划任务

为啥在编写 linux 守护进程时必须与 tty 分离?

Linux提高:信号(不会)

Linux提高:信号(不会)

如何在Linux下用c语言创建守护进程并监控系统运行期间的所有进程