在Linux系统中,守护进程(Daemon)是后台运行的特殊进程,通常独立于终端,负责提供系统服务或执行周期性任务,如systemd、nginx、sshd等,查看守护进程的状态、运行情况是系统管理和故障排查的基础操作,本文将详细介绍Linux下查看守护进程的多种方法及相关命令的使用技巧。
使用ps
命令查看守护进程
ps
(Process Status)是Linux中最基础的进程查看工具,通过搭配不同选项可筛选守护进程,守护进程的典型特征是终端标识(TTY)为,父进程ID(PPID)通常为1(init/systemd进程)。
常用选项及示例
-
ps -ef
:显示所有进程的详细信息,包括UID、PID、PPID、C(CPU占用率)、STIME(启动时间)、TIME(CPU累计时间)、CMD(命令行)。ps -ef | grep '?' | grep -v grep
解释:
grep '?'
筛选TTY为的进程(守护进程),grep -v grep
排除grep命令本身。 -
ps aux
:以用户为中心显示进程,包含USER、PID、%CPU、%MEM、VSZ(虚拟内存大小)、RSS(常驻内存大小)、STAT(进程状态)、START(启动时间)、TIME(CPU时间)、COMMAND(命令)。ps aux | grep '?' | grep -v grep
-
ps -C 进程名
:直接通过进程名筛选,例如查看nginx守护进程:ps -C nginx
-
--sort
:按指定字段排序,如按CPU占用率降序查看守护进程:ps -e -o pid,ppid,cmd,%cpu --sort=-%cpu | grep '?' | grep -v grep
使用systemctl
命令查看systemd守护进程
现代Linux发行版多采用systemd作为初始化系统,守护进程以服务(Unit)形式由systemd管理。systemctl
是systemd的核心管理工具,可查看服务的运行状态、依赖关系等。
常用命令及示例
-
systemctl list-units --type=service --state=running
:列出所有正在运行的系统服务:systemctl list-units --type=service --state=running
-
systemctl list-units --type=service --all
:列出所有服务(包括 inactive、failed 状态):systemctl list-units --type=service --all
-
systemctl status 服务名.service
:查看特定服务的详细状态,包括运行状态、进程ID(Main PID)、日志等:systemctl status nginx.service
-
systemctl is-active 服务名
:检查服务是否正在运行(返回active
或inactive
):systemctl is-active sshd
-
systemctl list-sockets
:查看通过socket激活的服务(如systemd.socket),适合排查网络相关守护进程:systemctl list-sockets
systemctl
常用子命令对比
子命令 | 功能 | 示例 |
---|---|---|
list-units |
列出所有单元(服务、socket等) | systemctl list-units --type=service |
list-sockets |
列出socket激活的服务 | systemctl list-sockets |
status |
查看单元状态及日志 | systemctl status cron |
is-active |
检查单元是否运行 | systemctl is-active httpd |
is-enabled |
检查服务是否开机自启 | systemctl is-enabled mysql |
使用top
/htop
实时监控守护进程
top
和htop
是动态进程监控工具,可实时查看守护进程的资源占用(CPU、内存)及运行状态,适合排查性能问题。
top
命令使用
-
top -c
:显示完整命令行(默认只显示进程名),按P
按CPU占用率排序,按M
按内存排序:top -c
守护进程通常位于列表顶部(资源占用高),或通过
COMMAND
字段识别(如/usr/sbin/sshd
)。 -
top -p PID1,PID2
:指定多个进程ID监控,例如监控systemd和nginx:top -p 1,1234
htop
命令使用
htop
是top
的增强版,支持彩色显示、树形进程视图、进程筛选等功能,操作更直观:
htop -p PID
:指定进程监控;F3
(Search):按进程名搜索守护进程(如输入nginx
);F5
(Tree):以树形结构显示进程父子关系,守护进程通常位于顶层(父PID为1)。
使用ss
/netstat
查看网络守护进程
许多守护进程(如nginx、sshd、mysql)需监听网络端口,通过ss
(Socket Statistics)或netstat
可查看端口对应的守护进程。
ss
命令(推荐,性能优于netstat
)
ss -tulnp
:显示所有监听(-l
)的TCP(-t
)、UDP(-u
)端口及对应进程(-n
避免域名解析,-p
显示PID/进程名):ss -tulnp | grep ':80'
输出示例:
LISTEN 0 511 *:80 *:* users:(("nginx",pid=1234,fd=6))
,表明80端口由nginx进程监听。
netstat
命令(传统工具)
netstat -tulnp
:与ss
参数类似,功能相同:netstat -tulnp | grep ':22'
通过/proc
文件系统查看守护进程
/proc
是Linux内核提供的虚拟文件系统,包含运行中进程的详细信息,通过/proc/[PID]/
目录可深入查看守护进程的配置、环境变量等。
示例操作
-
查看所有守护进程PID:
ls /proc | grep -E '^[0-9]+$' | xargs -I {} sh -c 'cat /proc/{}/status | grep -q "Name:.*nginx" && echo {}'
解释:遍历
/proc
下的数字目录(进程PID),通过status
文件筛选nginx进程的PID。 -
查看守护进程启动命令:
cat /proc/1/cmdline # 查看PID为1的进程(systemd)启动命令 cat /proc/1234/cmdline # 查看nginx守护进程的完整启动命令
-
查看守护进程环境变量:
cat /proc/1234/environ | tr '