守护进程(daemon) 也称精灵进程,是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。

使守护进程独立于所有终端是因为,在守护进程从一个终端启动的情况下,这同一个终端可能被其他的用户使用。例如,用户从一个终端启动守护进程后退出,然后另外一个人也登录到这个终端。用户不希望后者在使用该终端的过程中,接收到守护进程的任何错误信息。同样,由终端键入的任何信号(例如中断信号)也不应该影响先前在该终端启动的任何守护进程的运行。虽然让服务器后台运行很容易(只要shell命令行以&结尾即可),但用户还应该做些工作,让程序本身能够自动进入后台,且不依赖于任何终端。

守护进程没有控制终端,因此当某些情况发生时,不管是一般的报告性信息,还是需由管理员处理的紧急信息,都需要以某种方式输出。Syslog 函数就是输出这些信息的标准方法,它把信息发送给 syslogd 守护进程。

默认情况下,进程是在前台运行的,这时就把shell给占据了,我们无法进行其它操作。对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的:

最大的区别有几点:
(a)守护进程已经完全脱离终端控制台了,而后台程序并未完全脱离终端,在终端未关闭前还是会往终端输出结果
(b)守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command & 格式运行才能避免影响
(c)守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变。

守护进程特点:

(a)所有的守护进程都没有控制终端,其终端名(TTY)设置为问号(?)。

(b)自成会话,自成进程组。不与其他会话或进程组相互关联,干扰。所以一般一个守护进程的进程ID,组ID,会话ID都相同。(自成进程组这点说的也不太严谨,若父进程是守护进程,父进程fork的子进程也是守护进程。这时父子进程属于同一进程组)

(c)命令以‘d’结尾

(d)守护进程不受用户登录注销的影响,当你注销或者重登后,守护进程一直在运行。

(e)生存期长,在系统引导装入时启动,仅在系统关闭时终止。

(f)在后台运行(原因可归结于没有控制终端)

(g)大多数的守护进程都以root特权运行。

相关命令解析:

1、nohup

用途:不挂断地运行命令,即使终端ssh关闭了也一直运行。

语法:nohup Command [ Arg … ] [ & ]

例:nohup start.sh &

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。nohup.out相对于日志

如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

2、&

用途:在后台运行,当关闭了ssh终端,程序也会关闭

一般这种程序使用 & 结尾,但是如果终端关闭,那么程序也会被关闭。

例: start.sh &

3、ps –aux

ps -aux                可以查看进程,

  kill -9  进程号        然后杀死此进程

4、使普通进程达到守护进程的部分效果:

nohup command &

5、查看守护进程:

ps -axj  
-a表示显示由其他用户所拥有的进程的状态

-x显示没有控制终端的进程状态

-j显示与作业有关的信息:会话ID、进程组ID等
用户层守护进程

用户层没有终端的原因可能是调用了setsid函数的结果。大多数用户层守护进程都是进程组的组长进程以及会话的会话首进程,而且是这些进程组和会话中的唯一进程(rsyslogd是一个例外)。

我们通常所说的1号进程init就是一个系统守护进程。除了其他工作外,主要负责启动各运行层析的系统服务。这些服务通常是在它们自己拥有的守护进程的帮助下实现的。此外,init就是用户层进程的父进程。

内核线程(内核守护进程)
(其实也叫内核进程,Linux没有真正意义上的线程,都是用进程模拟实现,轻量级进程。)
内核守护进程以无终端的方式启动,凡是在TPGID一栏写着-1的进程都是没有控制终端的进程,也就是守护进程。在COMMAND列[ ]括起来的名字表示内核线程,这些线程在内核创建,没有用户空间代码,因此没有程序文件名和命令行, 通常采用以k开头的名字,表Kernel。对于需要在进程上下文执行工作但却不被用户层进程上下文调用的每一个内核组件,通常都有它自己的内核守护进程。
Linux通常使用一个叫kthreadd的特殊内核进程来创建其他内核进程,所以kthreadd表现为其他内核进程的父进程。

linux 守护进程小结相关推荐

  1. Linux守护进程实现

    Linux守护进程 redis版: void daemonize(void) {int fd;if (fork() != 0) exit(0); /* parent exits */setsid(); ...

  2. Linux 命令详解(六)Linux 守护进程的启动方法

    Linux 守护进程的启动方法 http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html

  3. .NET跨平台实践:.NetCore、.Net5/6 Linux守护进程设计

    几年前,我写过两篇关于用C#开发Linux守护进程的技术文章,分别是<.NET跨平台实践:用C#开发Linux守护进程.NET跨平台实践:再谈用C#开发Linux守护进程 - 完整篇 这就是本文 ...

  4. .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇

    Linux守护进程是Linux的后台服务进程,相当于Windows服务,对于为Linux开发服务程序的朋友来说,Linux守护进程相关技术是必不可少的,因为这个技术不仅仅是为了开发守护进程,还可以拓展 ...

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

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

  6. 深入理解Linux守护进程

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

  7. Linux守护进程的创建(结合nginx框架)

    Linux守护进程的创建(结合nginx框架) 先介绍几个相关函数: int dup2(arg1,arg2):参数一指向的内容赋给参数二,shi的参数二也能访问参数一所指向的内容,并返回新的描述符 i ...

  8. linux+守护进程+php,【转载】Linux 守护进程的编程方法

    [转载]Linux 守护进程的编程方法 原文见: http://www.linuxdevelop.org/tingxx/show.php?table=c&id=3 Linux 守护进程的编程方 ...

  9. linux 守护进程_网络工程师之linux守护进程

    Linux守护进程就是通常所说的DEAMON进程,linux后台服务多种多样,每一个服务都运行一个对应的程序,这些后台程序对应的进程就是守护进程.系统中可以看到很多如DHCPD和HTTPD之类的进程, ...

最新文章

  1. python 判断字符串是否为空,字典是否为空,列表是否为空,元组是否为空的方法
  2. 验证URL链接和IP有效性的JS代码(正则表达式)
  3. ML 05、分类、标注与回归
  4. webstorm安装_WebStorm2019安装教程
  5. VisualBox中增大linux硬盘空间的方法
  6. 5大过程组与整体管理
  7. 可持久化Splay 学习笔记
  8. Ubuntu 配置 Tomcat
  9. mysql去重的最方便的两种方法_mysql去重的最方便的两种方法
  10. mysql慢查询 表级锁_三分钟了解Mysql的表级锁——《深究Mysql锁》
  11. 自定义列_如何对Pandas DataFrame进行自定义排序
  12. 写在通用权限管理系统销售200套,从刚开始求人家用到人家主动索取,写一下亲身感受...
  13. 关于sql语句between and的边界问题
  14. 不为人知的AI简史:人机共生梦想家,却意外促成互联网的出现
  15. 【控制】《最优控制理论与系统》-胡寿松老师-第4章-动态规划
  16. 高项论文(沟通管理)
  17. Spiceworks数据统计:Win10发布半年使用情况
  18. 第欧根尼:我崇尚简朴朴素克己的生活
  19. Typora图片云存储
  20. 命题逻辑的合理性和完备性证明

热门文章

  1. python 解决第三方app微信登入昵称乱码的问题
  2. 电商html轮播动效,制作一个电商网站的轮播图效果
  3. mysql 中类似dateadd_MySQL查询中的DATEADD或DATE_ADD?
  4. 树莓派+Ardunio的魔方机器人
  5. 学习记录(2018.7.18)
  6. 因果推断实战:淘宝3D化价值分析小结
  7. python内部的数据结构
  8. mysql5.7.28数据降级兼容mysql5.6.46
  9. html无序列表透明圆点,html无序列表的类型type
  10. Liang的Rootkit习作-ZION