Linux 守护进程
1.什么是守护进程
守护进程daemon指的是在后台运行的进程
2.前台任务和后台任务
前台任务:独占命令行窗口,运行完毕或手动终止,才能执行其他命令
以redis服务为例
redis-server
运行结果:


中止服务或退出session(即服务器连接),就无法访问了

后台任务:中止服务或退出session后,进程仍能访问
redis-server&
运行结果:


中止服务或退出session(即服务器连接)
运行结果:

在命令尾部加上符号&,启动的进程就会成为“后台任务”
对于前台任务,若要变为后台任务,可以现按Ctrl+z,然后执行bg命令(让最后一个执行的任务后台继续执行)

3.后台任务的特点
1)继承当前session(服务器连接)的标准输出(stdout)和标准错误(stderr),因此任务的输出依然会在命令行下显示
2)不再继承当前session的标准输入(stdin),因此输入,没有作用
4.SIGHUP信号
SIGHUP信号的作用是终止收到该信号的进程
Linux退出session会发生以下操作:
1)用户准备退出session
2)系统向该session发出SIGHUP信号
3)session将SIGHUP信号发给所有子进程
4)子进程收到SIGHUP信号,自动退出
由上可知,前台任务会随着session的退出而退出,因为它收到了SIGHUP信号
当Shell的huponexit参数为off时,session退出的时候,不会把SIGHUP信号发给后台任务,因此后台任务不会随着session一起退出。
查看系统huponexit参数值:

有的系统huponexit参数的值可能是on,所以更好的方法是使用disown命令,disown可以将指定任务从任务列表中移除,这样session就不会向她发出SIGHUP信号。
disown用法如下:
disown # 移除最近一个正在执行的后台任务
disown -r # 移除所有正在执行的后台任务
disown -a # 移除所有后台任务
disown -h # 不移除后台任务,但是让它们不会收到SIGHUP信号
disown %2 # 移除指定的后台任务
5.标准IO
disown后,如果退出session后,如果后台进程与标准IO有交互,它还是会挂掉
此时需要对后台任务的标准IO进行重定向。
redis-server > stdout.txt &
6.nohup命令
nohup命令比disown更方便,nohup命令作用如下:
1)阻止SIGHUP信号发到这个进程
2)关闭标准输入。该进程不再接受任何输入
3)重定向标准输出和标准错误到nohup.out
nohup将子进程与它所在的session分离了
nohup不会自动把进程变为“后台任务”,必须加上“&”符号
使用示例如下:
nohup redis-server &
7.Screen命令和Tmux命令
Screen和Tmux命令,可以实现在一个终端里,管理多个session
这样当当前session结束了,也不影响其他session,而且可以重新登录,再连上早先新建的session
使用示例如下:
$ screen
$ redis-server
按下ctrl+A和ctrl+D,可以回到原来的session
screen命令如下:
$ screen -S name
# 切回指定 session
$ screen -r name
$ screen -r pid_number
# 列出所有session
$ screen -ls
tmux功能类似,不再详述
8.Systemd管理工具
除了以上工具,Linux有还有一个守护进程管理工具Systemd,它是操作系统的一部分,直接与内核交互。
后续再详细研究。
Linux 守护进程的更多相关文章
- .NET跨平台实践:用C#开发Linux守护进程
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
- .NET跨平台实践:用C#开发Linux守护进程(转)
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
- [转]❲阮一峰❳Linux 守护进程的启动方法
❲阮一峰❳Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 ...
- Server Develop (七) Linux 守护进程
守护进程 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装 ...
- Linux 守护进程和超级守护进程(xinetd)
一 .Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的 ...
- Linux守护进程详解(init.d和xinetd) [转]
一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台 的守护进程来执行的 ...
- Linux守护进程的编程实现
Linux 守护进程的编程方法 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程.Linux的大多数s ...
- Linux守护进程详解(init.d和xinetd)
一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的. ...
- C#开发Linux守护进程
用C#开发Linux守护进程 Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon ...
- 笔记整理--Linux守护进程
Linux多进程开发(三)进程创建之守护进程的学习 - _Liang_Happy_Life__Dream - 51CTO技术博客 - Google Chrome (2013/10/11 16:48:2 ...
随机推荐
- 基于RecyclerView实现的分组显示信息demo
发布时间:2018-11-07 技术:Android Studio 3.1.3+ RecyclerView+sectionRecyclerViewAdapter 概述 利用sectionedR ...
- DialogFragment 监听按键事件的方法(onkeydown)
我们在TV软件开发的时候,会使用DialogFragment,有时候要对它的按键事件进行监听,但是DialogFragment的监听方法和其它的不一样. ...
- ios中第三方库归结
1:uiscrollview 折叠 展开中不包含tablecell. 展开列表效果 Collapse Click () https://github.com/bennyguitar/Collapse ...
- (原+译)pytorch中保存和载入模型
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/8108466.html 参考网址: http://pytorch.org/docs/master/not ...
- hibernate注解note
@Id标识主键属性 1.hibernate5.2 mysql5.7 不需要实现 serializable也可以? 2.主键255的长度我生成了? @GeneratedValue主键生成策略 1.主键设 ...
- 支持向量机-SVM 学习
一 .支持向量机(SVM) 1.1 符号定义 标签 y 不再取 0 或 1,而是: y∈{-1, 1} 定义函数: 向量,没有第 0 个维度,b 为截距,预测函数定义为: 1.2 函数间隔与几何间隔 ...
- Seqlite学习
之前没有接触过数据库编程,尼玛,面试神码的最恶心了,非得神码都懂点,好吧,最近开始研究下,先从SQLite开始吧,贴上找到SQliteDB.之后搜集资料,慢慢学习!
- 关于去哪儿网的UI自动化测试脚本
UI自动化测试Qunar机票搜索场景访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发.到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索 ...
- 【IL】IL入门
1.IL基本介绍 1.1 CLR介绍 在介绍IL之前,先说一说CLR.CLR的全称Commen Language Runtime 公共语言运行时.因为CLR的存在,使得多语言开发成为可能.下面给出一张 ...
- Oracle 12C -- clone a non-cdb as a pdb
将non-CDB置为只读模式: $ sqlplus '/as sysdba' SQL> select name, decode(cdb, 'YES', 'Multitenant Option e ...