Linux守护进程详解

作者&投稿:郑吕 (若有异议请与网页底部的电邮联系)
~

在Linux服务器实际应用中,经常会有需要长时间执行的任务。这类任务若在前台运行,用户无法进行其他操作或者断开与服务器的连接,否则任务将被中止。此时适合使用守护进程。为了使用守护进程,需要了解Linux前台、后台、守护进程的概念与使用,本文将对此进行讲解。

可以看出,”后台任务”与”前台任务”的重要区别: 是否继承标准输入 。所以,执行后台任务的同时,用户还可以输入其他命令。

为了理解守护任务为何在结束session时也不退出,需要先了解Linux下退出session时发生的操作。

Session退出时,linux系统设计如下:

前台任务会随着session的退出而退出是因为它收到了 SIGHUP信号
后台任务是否会受到SIGNUP信号,取决于shell的 huponexit 参数。可以通过 $ shopt | grep huponexit 查看该参数的值。大多数Linux系统,这个参数默认关闭(off)。因此,session退出的时候,不会把SIGHUP信号发给”后台任务”,即此时的后台任务是守护进程,但这显然不够安全。并不保险,因为有的系统的 huponexit 参数可能是打开的(on)状态。

更保险的方法是使用 disown命令。它可以将指定任务从”后台任务”列表(jobs命令的返回结果)之中移除 。一个”后台任务”只要不在这个列表之中,session 就肯定不会向它发出SIGHUP信号。

执行上面的命令以后, server.js 进程就被移出了”后台任务”列表。你可以执行 jobs 命令验证,输出结果里面,不会有这个进程。

但是,这样还存在问题。因为 ”后台任务”的标准 I/O 继承自当前 session, disown 命令并没有改变这一点 。一旦”后台任务”读写标准 I/O,就会发现它已经不存在了,所以就 报错终止执行 。 为了解决这个问题,需要对”后台任务”的 标准 I/O 进行重定向

这样基本上就没有问题了。

注:
/dev/null 文件的作用
这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。
所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里

nohup命令对server.js进程做了三件事。
阻止SIGHUP信号发到这个进程。
关闭标准输入。该进程不再能够接收任何输入,即使运行在前台。
重定向标准输出和标准错误到文件nohup.out。

也就是说,nohup命令实际上将子进程与它所在的 session 分离了。 注意,nohup命令不会自动把进程变为”后台任务”,所以必须加上&符号

守护进程创建方法:

方法一:

方法二:

方法三:

fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令

一、&
加在一个命令的最后,可以把这个命令放到后台执行,如:

二、ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

CTRL+Z 和 CTRL+C的对比

CTRL+Z 和 CTRL+C 都是中断命令,但是他们的作用却不一样.
CTRL+C 是强制中断程序的执行,而 CTRL+Z 的是将任务中断,但是此任务并没有结束,仍然在进程中,只是维持挂起的状态,用户可以使用 fg/bg 操作继续前台或后台的任务。

三、jobs
查看当前有多少在后台运行的进程

jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

四、fg
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber (jobnumber是命令编号,不是进程号)将选中的命令调出。

五、bg

将一个在后台暂停的命令,变成在后台继续执行。

如果后台中有多个命令,可以用 bg %jobnumber 将选中的命令调出。

六、kill

方法1:通过jobs命令查看job号(假设为num),然后执行

方法2:通过ps命令查看job的进程号(PID,假设为pid),然后执行

前台进程的终止:Ctrl+c

七、nohup

如果想让程序即使在关闭当前的终端后也始终在后台执行(之前的&做不到),需要使用nohup命令。
nohup命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
关闭终端后,在另一个终端jobs已经无法看到后台跑的程序了,此时利用ps(进程查看命令)查看进程。

http://m.2cto.com/os/201301/185701.html

http://www.cnblogs.com/kaituorensheng/p/3980334.html

http://m.blog.csdn.net/article/details?id=50766752




Linux守护进程详解
nohup命令对server.js进程做了三件事。 阻止SIGHUP信号发到这个进程。 关闭标准输入。该进程不再能够接收任何输入,即使运行在前台。 重定向标准输出和标准错误到文件nohup.out。也就是说,nohup命令实际上将子进程与它所在的 session 分离了。 注意,nohup命令不会自动把进程变为”后台任务”,...

详解Linux系统中的守护进程
(1)若守护进程使用锁文件,那么该文件通常存放在\/var\/run目录中。锁文件的名字通常是name.pid,name是该守护进程或服务的名字。  (2)若守护进程支持配置选项,那么配置文件通常存放在\/etc目录中。配置文件的名字通常是name.conf。  (3)守护进程可用命令行启动,但通常它们...

守护进程linux守护进程列表
cron: Linux下的计划任务,定时执行预设的任务。Dhcpd: 动态IP地址分配服务器,自动为设备分配网络地址。Gated: 动态OSPF路由选择协议的网关路由守护进程。Httpd: 提供Web服务,支持HTTP访问。Inetd: 核心守护程序,支持多种网络服务的监听和处理。Innd: Usenet新闻服务器,用于接收和分发新闻信息。Linuxconf:...

linux怎样看守护进程
在Linux中,可以使用以下命令来查看系统的守护进程:ps命令:ps命令可以列出当前系统运行的所有进程,包括守护进程。要列出所有进程,可以使用以下命令:ps auxtop命令:top命令可以实时地显示系统的进程状态,包括CPU和内存的使用情况。要查看守护进程,可以在top命令中按下“Shift + H”键。systemctl命令:...

守护进程linux守护进程linux
Linux系统中的第一个进程是\/sbin\/init,它是内核调用的第一个进程,它的PID就是1号。inetd进程是因特网守护进程,它同时监听多个端口号上的连接,当有客户端连接到某项服务时,就启动相应的服务,它的作用就是使提供网络服务服务器程序不需要一直运行,可以在需要的时候由inetd进程来启动。

守护线程Linux守护进程的编程方法
Linux系统中,守护进程是一种不可或缺的进程形式,广泛应用于服务器设置,如Internet服务器的inetd和Web服务器httpd等。它们在系统中承担着众多关键任务,例如作业调度的crond进程和打印服务的lpd进程等。虽然守护进程的编程基础相对简单,但需要注意的是,不同版本的Unix系统在实现机制上有所差异,这导致在...

如何正确编写linux守护进程
1、守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。2、创建守护进程步骤 1)创建子进程...

linux守护进程脚本linux守护进程
这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本\/etc\/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。

linux命令大全之crontab命令使用详解
另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。 一、crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会...

守护进程的简介
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成...

珙县13281215685: Linux守护进程 - 搜狗百科
自晶安痛: 1.stand-alone模式 stand-alone方式是Unix传统的C/S模式的访问模式.服务器监听... 这通常意味着资源浪费.为了解决这个问题,Linux引进了“网络守护进程服务程序”...

珙县13281215685: 守护进程的介绍 -
自晶安痛: 在linux或者unix操作系统中在系统引导的时候会开启很多服务,这些服务就叫做守护进程.为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统. 守护进程是脱离于终端并且在后台运行的进程.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断.

珙县13281215685: linux 进程守护程序怎么写 -
自晶安痛: 守护进程及其特性 (1)守护进程最重要的特性是后台运行.在这一点上DOS下的常驻内存程序TSR与之相似. (2)其次,守护进程必须与其运行前的环境隔离开来.这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及...

珙县13281215685: Linux下的守护进程的概念?daemon.py是什么意思? -
自晶安痛: 1、守护进程就是那些不会与你见面,但在后台默默为你工作(守护着你)的进程.它可能一直在为你工作,也可能只是等等待着你有需要时“该出手时就出手“(等待的时候不会占用CPU).就像Windows所说的服务一样. 2、杀死守护进程和杀死其它进程一样,先查出进程的PID(进程号):ps -ef然后用kill命令kill -9 XXX(XXX是你刚刚查到的PID) 3、py指的是python,python是一种编程语言..py是用python与的程序. 4、大部分守护进程可像启动其它程序一样启动它,有些守望护进程是一个应用里的一部分,通过运行一个要调用它的软件,或是脚本来启动它.补充:别乱杀守护进程,有危险

珙县13281215685: linux下的守护进程是什么意思? -
自晶安痛: 进程A监控进程B,发现进程B异常退出的时候就自动重启进程B. 进程A就称为进程B的守护进程.

珙县13281215685: 什么是系统守护进程 -
自晶安痛: 守护进程是生存期长的一种进程.它们独立于控制终端并且周期bai性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统关闭时终止.unix系统有很多守护进程,大多数服务器都是用du守护进程实现的.比如,...

珙县13281215685: Linux 下的守护进程是怎么保证它一直运行的 -
自晶安痛: 在Linux/UNIX系统引导的时候会开启很多服务,这些服务称为守护进程(也叫Daemon进程).守护进程是脱离于控制终端并且在后台周期性地执行某种任务或等待处理某些事件的进程,脱离终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的中断信息所终止.

珙县13281215685: 如何以守护进程在linux系统下执行 -
自晶安痛: 编写守护进程程序的要点: (1)让程序在后台执行.方法是调用fork()产生一个子进程,然后使父进程退出. (2)调用setsid()创建一个新对话期.控制终端、登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们的影...

珙县13281215685: linux守护进程的几个关键地方 -
自晶安痛: 创建一个守护进程,有几个关键的步骤,也有几个地方需要注意,几个关键的步骤有:1:清除文件创建权限2:调用fork,然后使父进程退出3:调用setsid以创建一个新的会话,有三个目的使调用进程 a:成为新会话的首进程,b:成为新进程的组长进程,c:没有控制终端4:切换工作目录5:关闭不需要的文件描述符

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网