查找一个进程是如何启动的

2026-04-09 21:09:00
丁国栋
原创 12
摘要:本文记录和总结如何查找一个进程的源头。

Debian Linux 12 (bookworm) 有一个进程kill -9后,过一会儿仍然会启动,如何排查呢?

在这种 Systemd 主导的系统中,进程“杀不死”通常不是进程本身在复活,而是它的守护者(Supervisor)在自动重启它。单纯的 kill -9 只是“治标”,需要找到并处理背后的监管机制。

先找到该进程的 PPID(父进程ID) 和所属的 CGroup

# 查看进程的 cgroup 信息
cat /proc/$(pgrep -f your_service)/cgroup
  1. 如果输出中包含 name=systemd 或者 system.slice 路径,说明是 systemd 托管。

例如:

root@debian12:~$ cat /proc/986/cgroup
0::/system.slice/nginx.service
root@debian12:~$

说明是 986 这个进程ID是由 systemdnginx.service 管理的。

4945 这个进程是容器进程。

root@debian12:~$ cat /proc/4945/cgroup
0::/system.slice/containerd.service
root@debian12:~$

说明是 4945 这个进程ID是由 systemdcontainerd.service 管理的。

root@debian12:~$ cat /proc/5044/cgroup
0::/system.slice/docker-9c33abf6b5c7fca6320284367c719fe31b56fff61bf9d912481f247a35a5732d.scope
root@debian12:~$

5044 这个进程是容器内的一个进程。

  1. 如果输出中包含 /system.slice/cron.service 说明是 cron 守护进程(Systemd 管理的)。

例如:

root@debian12:~$ cat /proc/7204/cgroup
0::/system.slice/cron.service
root@debian12:~$

说明 7204 进程是 cron 计划任务创建的。

--

发表评论
博客分类