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 守护进程的更多相关文章

  1. .NET跨平台实践:用C#开发Linux守护进程

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  2. .NET跨平台实践:用C#开发Linux守护进程(转)

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  3. [转]❲阮一峰❳Linux 守护进程的启动方法

    ❲阮一峰❳Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 ...

  4. Server Develop (七) Linux 守护进程

    守护进程 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装 ...

  5. Linux 守护进程和超级守护进程(xinetd)

    一 .Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的 ...

  6. Linux守护进程详解(init.d和xinetd) [转]

    一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台 的守护进程来执行的 ...

  7. Linux守护进程的编程实现

    Linux 守护进程的编程方法 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程.Linux的大多数s ...

  8. Linux守护进程详解(init.d和xinetd)

    一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的. ...

  9. C#开发Linux守护进程

    用C#开发Linux守护进程   Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon ...

  10. 笔记整理--Linux守护进程

    Linux多进程开发(三)进程创建之守护进程的学习 - _Liang_Happy_Life__Dream - 51CTO技术博客 - Google Chrome (2013/10/11 16:48:2 ...

随机推荐

  1. Activity四种启动模式之singleTask应用

    Activity启动模式设置:         <activity android:name=".MainActivity" android:launchMode=" ...

  2. ID3D11DeviceContext::DrawIndexed DrawIndexed 参数详解 StartIndexLocation BaseVertexLocation

    先来看一下画的结果: m_pImmediateContext->DrawIndexed(36, 0, 0); 这个是画一个立方体 后两个参数都是0没有什么可说的. m_pImmediateCon ...

  3. mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询

    1. 1)MySQL 连接本地数据库,从cmd中进入mysql命令编辑器: root root分别为用户名和密码 mysql -uroot -proot 2)MySQL 连接本地数据库,用户名为“ro ...

  4. iOS开发调试Reveal使用

    推荐通过Xcode中加断点的方式集成Reveal(小缺陷,当你禁用断点时或者不用Xcode而用Appcode开发时,这个方式是不管用). 打开您的iOS工程,选择 View → Navigators ...

  5. iOS中消息传递方式

    iOS中消息传递方式 在iOS中有很多种消息传递方式,这里先简单介绍一下各种消息传递方式. 1.通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式. NSNotificati ...

  6. 封装naive socket

    周五去一个公司打了个酱油,面试官问我:你封装过socket没? 言下之意是问我实际写过底层代码没,我悻悻地说写过点. PS:说实话木有封装过,今天无聊就来封装下. 话说写了这么久C++,底层用c来写还 ...

  7. kickstart命令选项

    下面的选项可以放入kickstart文件.如果喜欢使用图形化的界面来创建kickstart文件,可以使用"Kickstart配置"应用程序.(注:如果某选项后面跟随了一个等号(=) ...

  8. Nginx配置Awstats分析Nginx日志笔记

    1.修改Nginx日志格式: log_format json '$remote_addr - $remote_user [$time_local] "$request" '     ...

  9. linux达人养成计划学习笔记(三)—— 帮助命令

    一.帮助命令man 1.基本使用方法: man 命令 #获取指定命令的帮助选项: -f 查看命令拥有的帮助级别 相当于whatis,也可以使用whereis来查询 -num 调用对应等级的帮助文件 - ...

  10. 解决UEditor将div标签换成p标签的问题

    原文链接 将设计排版好的页面html代码上传到数据库,再读取出来的时候发现所有的div都被替换成了p标签. 解决方法: 首先在ueditor.all.js文件内搜索allowDivTransToP,找 ...