文档章节

Linux查找所有正在运行的守护进程(daemon)

ChenQi
 ChenQi
发布于 2014/12/03 16:30
字数 725
阅读 1.3K
收藏 0

ps -eo ppid,pid,sid,stat,tty,comm  | awk '{ if ($2 == $3 && $5 == "?") {print $0}; }'


首先,要注意,守护进程(daemon)和后台进程(background process)有区别。

守护进程是一种后台进程,但是,同时,它必须具备以下特性:

1. 没有控制它的tty

2. 必须是一个session leader

3. 必须是一个进程组的leader

4. 执行后台任务

5. root目录即为工作目录

6. umask设置为0

7. 文件描述符(file descriptor)都必须先关闭,然后再关联相应文件(或者设备),如果有需要的话。

Wiki原文摘录如下:

On a Unix-like system, the common method for a process to become a daemon, when the process is started from the command line or from a startup script such as an init script or a SystemStarter script, involves:

  • Dissociating from the controlling tty

  • Becoming a session leader

  • Becoming a process group leader

  • Executing as a background task by forking and exiting (once or twice). This is required sometimes for the process to become a session leader. It also allows the parent process to continue its normal execution.

  • Setting the root directory (/) as the current working directory so that the process does not keep any directory in use that may be on a mounted file system (allowing it to be unmounted).

  • Changing the umask to 0 to allow open(), creat(), et al. operating system calls to provide their own permission masks and not to depend on the umask of the caller

  • Closing all inherited files at the time of execution that are left open by the parent process, including file descriptors 0, 1 and 2 for the standard streams (stdin, stdout and stderr). Required files will be opened later.

  • Using a logfile, the console, or /dev/null as stdin, stdout, and stderr

实际上,当我们查找守护进程的时候,没有必要用到以上那么多的标准,我们只需要用两条:

1. 没有控制终端

2. session leader

所以我们可以用文中最开始提到的命令来查找:

ps -eo ppid,pid,sid,stat,tty,comm  | awk '{ if ($2 == $3 && $5 == "?") {print $0}; }'


E.g


chenqi@pek-qchen1-d1:~/test [1] $ ps -eo ppid,pid,sid,stat,tty,comm  | awk '{ if ($2 == $3 && $5 == "?") {print $0}; }'
    0     1     1 Ss   ?        init
    1   401   401 Ss   ?        systemd-udevd
    1   435   435 Ssl  ?        rsyslogd
    1   446   446 Ss   ?        dbus-daemon
    1   520   520 Ss   ?        rpc.idmapd
    1   530   530 Ss   ?        systemd-logind
    1   575   575 Ss   ?        bluetoothd
    1   750   750 Ss   ?        smbd
    1   762   762 Ss   ?        rpcbind
    1   779   779 Ss   ?        rpc.statd
    1   829   829 Ssl  ?        ModemManager
    1   950   950 Ssl  ?        NetworkManager
    1   993   993 Ss   ?        cups-browsed
    1  1424  1424 Ss   ?        nmbd
    1  1550  1550 Ss   ?        acpid
    1  1559  1559 Ss   ?        cron
    1  1560  1560 Ss   ?        atd
    1  1565  1565 Ss   ?        sshd
    1  1612  1612 Ssl  ?        automount
    1  1622  1622 Ssl  ?        named
    1  1627  1627 Ssl  ?        whoopsie
    1  1664  1664 Ss   ?        gdomap
    1  1670  1670 Ss   ?        kerneloops
    1  1721  1721 Ss   ?        rpc.mountd
    1  1829  1829 Ss   ?        master
    1  1998  1998 Ss   ?        apache2
    1  2016  2016 SLsl ?        lightdm
 2561  2588  2588 Ss   ?        init
 2588  2653  2653 Ss   ?        dbus-daemon
 2588  2656  2656 Ss   ?        ssh-agent
 2588  2663  2663 Ss   ?        upstart-event-b
 2588  2667  2667 Ss   ?        window-stack-br
 2588  2668  2668 Ssl  ?        ibus-daemon
 2588  2681  2681 Ssl  ?        unity-settings-
 2588  2686  2686 Ssl  ?        hud-service
 2588  2687  2687 Ssl  ?        at-spi-bus-laun
 2588  2688  2688 Ssl  ?        gnome-session
 2588  2693  2693 Ssl  ?        unity-panel-ser
 2588  2786  2786 Ssl  ?        indicator-messa
 2588  2789  2789 Ssl  ?        indicator-bluet
 2588  2792  2792 Ssl  ?        indicator-power
 2588  2799  2799 Ssl  ?        indicator-datet
 2588  2800  2800 Ssl  ?        indicator-sound
 2588  2803  2803 Ssl  ?        indicator-print
 2588  2866  2866 Ssl  ?        indicator-sessi
 2588  2879  2879 Ssl  ?        indicator-appli
    1 24409 24409 Ss   ?        cupsd

© 著作权归作者所有

ChenQi
粉丝 61
博文 191
码字总数 111579
作品 0
丰台
高级程序员
私信 提问
加载中

评论(0)

Linux多任务编程(七)---Linux守护进程及其基础实验

守护进程概述 守护进程,又叫daemon进程(不知怎的,我突然想起来吸血鬼日记中的达蒙了,很好看的美剧),是Linux中的后台服务进程。他是一个生存期较长的进程,通常独立于控制终端并且周期性地...

长平狐
2013/06/17
230
0
可怕的万圣节 Linux 命令

虽然现在不是万圣节,也可以关注一下 Linux 可怕的一面。什么命令可能会显示鬼、巫婆和僵尸的图像?哪个会鼓励“不给糖果就捣蛋”的精神? crypt 好吧,我们一直看到 。尽管名称不同,crypt...

作者: Sandra Henry-stocker
2018/04/17
0
0
Linux守护进程--依然是进程

在linux中,服务是一种特殊的进程,可以说它和用户无关,它的作用不是完成用户任务,而是进行一些管理类的操作或者通用的服务类操作,实际上linux的服务就是一个进程,也仅仅是一个进程。 在...

晨曦之光
2012/04/10
664
0
Python 模拟linux守护进程

用python模拟linux的守护进程,本篇主要模拟过程。不过也可以用现成的库来直接编写python版的守护进程程序。 参考代码如下: #!/usr/bin/python import sys,os,time,atexitfrom signal impor...

China_OS
2013/04/14
2.1K
5
Linux守护进程的启动方法(转)

作者: 阮一峰 日期: 2016年2月28日 "守护进程"(daemon)就是一直在后台运行的进程(daemon)。 本文介绍如何将一个 Web 应用,启动为守护进程。 一、问题的由来 Web应用写好后,下一件事就...

easonjim
2017/12/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

django

aiodns 1.1.1aiohttp 3.6.1asn1crypto 0.24.0async-timeout 3.0.1attrs 19......

MtrS
4分钟前
0
0
SQL查询单表数据(一)

本节讲述 基本的 select 查询单表数据语句 1 从单表中查询所有的行和列 查询表中所有的数据 select * from t_user 在 SQL 中,字符 "*" 具有特殊的含义,使用用它,将从指定的表中返回每一列...

赵子龙
11分钟前
5
0
签名与无符号整数

我是否正确地说有符号和无符号整数之间的区别是: 无符号可以保持较大的正值,而不是负值。 无符号使用前导位作为值的一部分,而带符号版本使用最左侧位来标识数字是正数还是负数。 有符号整...

javail
16分钟前
25
0
【Vue_05】前端工程化

一、ES6的模块化 1. ES6模块化规范 每个 js 文件都是一个独立的模块 导入模块成员使用 import 关键字 暴露模块成员使用 export 关键字 2. 基本语法 发使用 export default { }导出默认成员 ...

Demo_Null
17分钟前
18
0
阿里P7高级架构师分享6年多的Java工作经验(想冲破瓶颈者必看)

很多工作了五年左右的程序员每天已经习惯了机器般的写代码,如果是这样那么你永远只会是个基础程序员,因为你不能只会用,你要知道原理,不至于让你自己实现一个出来,但是基本原理要知道。 ...

JAVA一方
29分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部