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. Windows下node.js安装及环境配置

    1. 安装 官网下载node.js的安装版,一路next,中间可以自定义安装路径 完成后安装目录内容如下 cmd下检查是否安装成功 新版Node.js已自带npm,所以安装Node.js时会一起安装, ...

  2. 持续集成工具hudson

     2008-07-08  一.什么是持续集成 持续集成的核心概念 CI 过程会经常构建软件组件:在许多情况下,每当源代码存储库(比如 Subversion 或 ClearCase)中的代码发生变化时, ...

  3. org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or br

    WARN <init>, HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF R ...

  4. 进阶之路(中级篇) - 018 基于arduino的简易版智能衣架

    一.    设备及要求 目的:制作一个可以自动根据事实的天气的状况进行对衣架上的衣服进行晾晒. 基础装置:可伸缩的晾衣架. 开发环境:Arduino1. 8.1 主控板:Arduino UNO 动力装 ...

  5. Vue.js hello world

    <!DOCTYPE HTML> <html> <head> <title>vue.js hello world</title> <sc ...

  6. 使用Nexus搭建Maven内部服务器

    概述         我们在使用maven时,一般通过网络上一些公共的maven仓库来获取jar包,但是有时候会碰到网速比较慢的情况就比较郁闷,Nexus是一个maven的服务器,可以让我们搭建一个本 ...

  7. golang 学习 ---- channel

    把一个loop放在一个goroutine里跑,我们可以使用关键字go来定义并启动一个goroutine: package main import "fmt" func loop() ...

  8. Java 8 forEach examples遍历例子

    1. forEach and Map 1.1 Normal way to loop a Map. Map<String, Integer> items = new HashMap<& ...

  9. JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象

    数组的增删改 1.新增一项可以使用concat方法,它不会对原有数组进行改动,而是创建一个新数组 let a = [0, 1, 2] let b = a.concat([3]) console.log ...

  10. mindoc 在线文档接口系统的 docker 制作过程

    说明: mindoc 是一款在线接口文档编辑系统,百度一下就知道了.github地址:https://github.com/lifei6671/mindoc 本机:ubuntu16.04 + dock ...