【超全详解】Linux进程管理从入门到实战(ps_jobs_kill全网精讲)

发布时间:2026/7/22 0:21:32
【超全详解】Linux进程管理从入门到实战(ps_jobs_kill全网精讲) 【超全详解】Linux进程管理从入门到实战ps/jobs/kill全网精讲摘要进程管理是Linux运维、开发必备核心技能本文从零讲解进程核心概念、进程状态、ps查看进程、前后台作业控制、进程信号、批量杀进程、顽固进程排查等实战内容所有命令附带详细注释零基础可看懂直接收藏复用标签Linux、进程管理、ps命令、kill运维实战一、基础概念彻底分清程序、软件、进程、线程很多新手容易混淆这四个概念本文用通俗语言精准区分程序存放在磁盘上的静态可执行文件仅占用磁盘空间不占用CPU、内存资源未运行状态。软件全套资源合集包含程序、配置文件、帮助手册、依赖库等比如Nginx、Yum工具都属于软件。进程程序运行后的动态实例是操作系统资源分配的最小单位会占用CPU、内存、磁盘IO、网络端口等资源。线程进程内部的最小执行单元一个进程可包含多个线程线程共享进程的内存资源CPU调度的核心单位。1.1 进程的核心组成一个完整的Linux进程包含四大核心要素独立的内存地址空间安全权限属性执行用户、特权、凭据一个或多个执行线程实时进程状态1.2 进程运行环境全局、局部变量CPU调度上下文系统占用资源文件描述符、网络端口、硬件句柄1.3 进程诞生机制fork父子进程Linux所有进程均通过fork()函数创建父进程复制自身资源生成全新子进程。进程产生过程fork实战示例终端执行sleep命令# 当前bash中执行sleep此时的sleep进程就是通过fork产生# sleep进程是bash进程的子进程[fangbingcentos7 ~17:25:31]$sleep51.4 进程状态理解系统核心功能才能吃透进程管理原理任务管理核心就是进程调度、启停、资源分配内存管理分配、回收进程内存防止内存溢出文件系统管理管理文件读写、权限、存储设备管理管理磁盘、网卡、外设硬件调用二、进程查看神器ps 命令超全详解ps 是Linux最核心的进程查看命令支持三种参数风格可精准筛选、查看系统所有进程状态与资源占用。2.1 ps 三种参数规范UNIX风格单个横杠-常用-ef、-uBSD风格无横杠 常用aux、axfGNU风格双横杠--常用–sort 排序2.2 高频ps命令上方带详细注释1、查看系统所有进程标准格式# 查看系统完整进程信息展示PID、父PID、启动时间、执行者等核心字段[fangbingcentos7 ~18:24:25]$ps-ef|headUIDPIDPPIDC STIME TTY TIME CMD root10009:41 ? 00:00:02 /usr/lib/systemd/systemd --switched-root--system--deserialize22root20009:41 ? 00:00:00[kthreadd]root42009:41 ? 00:00:00[kworker/0:0H]root62009:41 ? 00:00:00[ksoftirqd/0]root72009:41 ? 00:00:00[migration/0]root82009:41 ? 00:00:00[rcu_bh]root92009:41 ? 00:00:03[rcu_sched]root102009:41 ? 00:00:00[lru-add-drain]root112009:41 ? 00:00:00[watchdog/0]字段详解UID进程执行用户IDPID进程唯一IDPPID父进程IDC进程CPU占用占比STIME进程启动时间TTY进程绑定终端? 代表无终端守护进程TIME进程累计占用CPU时长非程序运行时长CMD进程执行命令/程序2、查看进程资源占用CPU/内存/状态# 查看所有进程的用户、CPU、内存、进程状态、终端等详细信息运维最常用[fangbingcentos7 ~18:26:32]$psaxu|headUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root10.00.11284086992? Ss 09:410:02 /usr/lib/systemd/systemd --switched-root--system--deserialize22root20.00.000? S 09:410:00[kthreadd]root40.00.000? S09:410:00[kworker/0:0H]root60.00.000? S 09:410:00[ksoftirqd/0]root70.00.000? S 09:410:00[migration/0]root80.00.000? S 09:410:00[rcu_bh]root90.00.000? S 09:410:03[rcu_sched]root100.00.000? S09:410:00[lru-add-drain]root110.00.000? S 09:410:00[watchdog/0]3、树形查看父子进程关系# 树形结构展示进程层级快速定位父子进程、进程依赖关系[fangbingcentos7 ~18:26:40]$psaxf|headPID TTY STAT TIME COMMAND2? S0:00[kthreadd]4? S0:00\_[kworker/0:0H]6? S0:00\_[ksoftirqd/0]7? S0:00\_[migration/0]8? S0:00\_[rcu_bh]9? S0:03\_[rcu_sched]10? S0:00\_[lru-add-drain]11? S0:00\_[watchdog/0]12? S0:00\_[watchdog/1]4、筛选指定用户的进程# 只查看laoma用户运行的所有进程[fangbingcentos7 ~18:28:15]$ps-ufangbing uUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND fangbing174560.00.01610722544? S15:110:00 sshd: fa fangbing174600.00.01167803480pts/1 Ss15:110:00-bashfangbing197320.00.01554481860pts/1 R18:300:00ps-ufa5、筛选指定终端的进程# 只查看pts/1终端下运行的所有进程[fangbingcentos7 ~18:31:11]$ps-tpts/1 uUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND fangbing174600.00.01167803480pts/1 Ss15:110:00-bashfangbing197460.00.01554481864pts/1 R18:310:00ps-tpts/1 u6、自定义查看进程指定字段# 查看指定PID进程的PID、CPU占比、内存占比、执行命令[fangbingcentos7 ~18:32:23]$ps-opid,%cpu,%mem,command4PID %CPU %MEM COMMAND40.00.0[kworker/0:0H]# 根据命令名筛选进程展示进程权限、执行用户[fangbingcentos7 ~18:34:20]$ps-Cpasswd-opid,ruser,euser,command PID RUSER EUSER COMMAND19893fangbing rootpasswd7、进程排序CPU/内存# 按CPU占用降序排序查看高负载进程[fangbingcentos7 ~18:37:43]$psaxu--sort-%cpu|headUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root7290.10.12955645284? Ssl 09:410:40 /usr/bin/vmtoolsd root10.00.11284086992? Ss 09:410:02 /usr/lib/systemd/systemd --switched-root--system--deserialize22root20.00.000? S 09:410:00[kthreadd]root40.00.000? S09:410:00[kworker/0:0H]root60.00.000? S 09:410:00[ksoftirqd/0]root70.00.000? S 09:410:00[migration/0]root80.00.000? S 09:410:00[rcu_bh]root90.00.000? S 09:410:03[rcu_sched]root100.00.000? S09:410:00[lru-add-drain]# 按内存占用升序排序[fangbingcentos7 ~18:39:40]$psaxu--sort%mem|headUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root20.00.000? S 09:410:00[kthreadd]root40.00.000? S09:410:00[kworker/0:0H]root60.00.000? S 09:410:00[ksoftirqd/0]root70.00.000? S 09:410:00[migration/0]root80.00.000? S 09:410:00[rcu_bh]root90.00.000? S 09:410:03[rcu_sched]root100.00.000? S09:410:00[lru-add-drain]root110.00.000? S 09:410:00[watchdog/0]root120.00.000? S 09:410:00[watchdog/1]三、Shell作业控制前台、后台进程管理运维中常需要后台运行程序避免关闭终端中断任务核心掌握jobs、fg、bg、 四大命令。3.1 前后台进程区别前台进程独占终端可接收键盘输入、CtrlC/CtrlZ信号一个终端同一时间仅一个前台进程。后台进程不占用终端输入无法接收键盘中断尝试读取输入时会自动暂停适合长时间任务。3.2 核心操作命令# 准备测试脚本[rootcentos7 ~18:32:46]# cat EOF /usr/local/bin/study#!/bin/bashwhiletruedoecho$(date): Im studying [$]study.logsleep1doneEOF[rootcentos7 ~18:47:35]# chmod x /usr/local/bin/study# \ 符号直接后台启动进程[fangbingcentos7 ~18:43:43]$ study Linux[1]20211# 查看当前shell所有的后台作业[fangbingcentos7 ~18:49:21]$jobs[1] 运行中 study Linux# 以前台方式运行按Ctrlz暂停前台进程[fangbingcentos7 ~18:49:30]$ study Python ^Z[2] 已停止 study Python# fg %编号:将jobs 3放到前台执行按CtrlC终止进程[fangbingcentos7 ~18:57:37]$jobs[1]运行中 study Linux[2]- 已停止 study Python[3] 已停止 study Python[fangbingcentos7 ~18:57:41]$fg%3 study Python ^C# bg %编号:将jobs 2放到后执行[fangbingcentos7 ~18:58:00]$jobs[1]- 运行中 study Linux[2] 已停止 study Python[fangbingcentos7 ~19:01:15]$bg%2[2] study Python[fangbingcentos7 ~19:01:27]$jobs[1]- 运行中 study Linux[2] 运行中 study Python# 清理实验终止进程[fangbingcentos7 ~19:01:32]$fgstudy Python ^C[fangbingcentos7 ~19:02:25]$fgstudy Linux ^C[fangbingcentos7 ~19:02:29]$[fangbingcentos7 ~19:02:29]$jobs# 新开窗口动态监控文件study.log内容可以动态观察执行情况[fangbingcentos7 ~18:52:17]$tail-fstudy.log3.3 关键知识点交互进程无法后台运行需要人工输入的进程如passwd改密码后台运行会自动暂停无法执行[fangbingcentos7 ~19:04:09]$passwd[2]22235[1] 已停止passwd[fangbingcentos7 ~19:04:23]$ 更改用户 fangbing 的密码 。 为 fangbing 更改 STRESS 密码。原理后台进程无终端输入权限无法交互系统自动暂停进程。四、终端断连解决方案nohup远程服务器执行长时间任务补丁、编译、备份关闭SSH终端进程会被杀掉完美解决方案# 忽略终端挂断信号后台永久运行进程日志默认输出到nohup.out[fangbingcentos7 ~19:11:39]$nohupstudy English[3]22351[fangbingcentos7 ~19:11:54]$ nohup: 忽略输入并把输出追加到nohup.out五、进程信号管理kill / pkill / pgrep信号是系统发给进程的软中断指令用于暂停、恢复、终止进程是进程管控核心。5.1 查看所有系统信号# 列出Linux所有支持的信号[fangbingcentos7 ~19:07:22]$kill-l1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE9)SIGKILL10)SIGUSR111)SIGSEGV12)SIGUSR213)SIGPIPE14)SIGALRM15)SIGTERM16)SIGSTKFLT17)SIGCHLD18)SIGCONT19)SIGSTOP20)SIGTSTP21)SIGTTIN22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO30)SIGPWR31)SIGSYS34)SIGRTMIN35)SIGRTMIN136)SIGRTMIN237)SIGRTMIN338)SIGRTMIN439)SIGRTMIN540)SIGRTMIN641)SIGRTMIN742)SIGRTMIN843)SIGRTMIN944)SIGRTMIN1045)SIGRTMIN1146)SIGRTMIN1247)SIGRTMIN1348)SIGRTMIN1449)SIGRTMIN1550)SIGRTMAX-1451)SIGRTMAX-1352)SIGRTMAX-1253)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-956)SIGRTMAX-857)SIGRTMAX-758)SIGRTMAX-659)SIGRTMAX-560)SIGRTMAX-461)SIGRTMAX-362)SIGRTMAX-263)SIGRTMAX-164)SIGRTMAX5.2 核心高频信号必记5.3 kill 命令实战作业/进程PID操作默认发15的信号# 创建进程[fangbingcentos7 ~19:22:36]$ study linux[1]23479[fangbingcentos7 ~19:22:42]$ study Python[2]23526# 暂停编号1的进程[fangbingcentos7 ~19:23:01]$jobs[1]- 运行中 study linux[2] 运行中 study Python[fangbingcentos7 ~19:23:23]$kill-19%1[fangbingcentos7 ~19:23:52]$jobs[1] 已停止 study linux[2]- 运行中 study Python# 恢复编号1的进程[fangbingcentos7 ~19:23:54]$kill-18%1[fangbingcentos7 ~19:24:38]$jobs[1] 运行中 study linux[2]- 运行中 study Python# 优雅终止进程[fangbingcentos7 ~19:24:40]$kill-15%1[fangbingcentos7 ~19:25:36]$jobs[1] 已终止 study linux[2]- 运行中 study Python# 强制杀死指定pid的进程[fangbingcentos7 ~19:26:42]$kill-923526[fangbingcentos7 ~19:27:05]$jobs[2] 已杀死 study Python5.4 pgrep / pkill 批量管理进程pgrep仅查询进程PIDpkill批量给进程发信号、杀进程# 创建进程[fangbingcentos7 ~19:30:52]$sleep1231sleep1232sleep1233[1]24297[2]24298[3]24299# 根据命令查看进程[fangbingcentos7 ~19:31:36]$ pgrepsleep-l24297sleep24298sleep24299sleep24309sleep[fangbingcentos7 ~19:32:21]$psaxu|grepsleepfangbing242970.00.0108052360pts/1 S19:360:00sleep1231fangbing242980.00.0108052360pts/1 S19:360:00sleep1232fangbing242990.00.0108052360pts/1 S19:360:00sleep1233root243090.00.0108052356? S19:360:00sleep60fangbing243130.00.0112824988pts/1 R19:370:00grep--colorautosleep# 根据用户名匹配进程[fangbingcentos7 ~19:33:27]$ps-ufangbing PID TTY TIME CMD19844? 00:00:00 sshd19849pts/2 00:00:00bash20616pts/2 00:00:00tail23272? 00:00:00 sshd23279pts/1 00:00:00bash24268pts/1 00:00:00ps[fangbingcentos7 ~19:33:40]$ pgrep-ufangbing1984419849206162327223279# 根据终端匹配进程[fangbingcentos7 ~19:36:29]$ pgrep-tpts/1-l23279bash24297sleep24298sleep24299sleep# pkill给指定的进程发默认信号优雅终止进程[fangbingcentos7 ~19:38:57]$pkillsleep[1]已终止sleep1231[2]- 已终止sleep1232[3] 已终止sleep1233六、实战难点kill不掉、反复重启的顽固进程手动kill子进程后瞬间生成新PID的同款进程无法彻底清除。模拟环境# 创建目录和准备程序[fangbingcentos7 ~19:41:51]$mkdirbin[fangbingcentos7 ~19:44:12]$catbin/mmEOF#!/bin/bashwhiletruedomd5sum /dev/zerosleep1doneEOF[fangbingcentos7 ~19:44:49]$chmodx bin/mm# 执行程序[fangbingcentos7 ~19:45:03]$nohupmm[4]24407[fangbingcentos7 ~19:46:38]$ nohup: 忽略输入并把输出追加到nohup.out# 查找进程[fangbingcentos7 ~19:47:38]$psaxo pid,%cpu,command--sort-%cpu|head-n5PID %CPU COMMAND2440899.8md5sum /dev/zero7290.1/usr/bin/vmtoolsd10.0/usr/lib/systemd/systemd --switched-root--system--deserialize2220.0[kthreadd]# kill强制杀死进程再次查看还是存在[fangbingcentos7 ~19:49:31]$kill-924439[fangbingcentos7 ~19:50:00]$psaxo pid,%cpu,command--sort-%cpu|head-n5PID %CPU COMMAND2446561.0md5sum /dev/zero7290.1/usr/bin/vmtoolsd10.0/usr/lib/systemd/systemd --switched-root--system--deserialize2220.0[kthreadd]解决方法# 找到幕后黑手也就是父进程杀死父进程和子进程[fangbingcentos7 ~19:53:53]$psax-f|grep-emd5sum-ePPIDUIDPIDPPIDC STIME TTY STAT TIME CMD fangbing24465244079919:50 pts/1 R4:26 md5sum /dev/zero fangbing2451223279019:54 pts/1 R0:00grep--colorauto-emd5sum-ePPID[fangbingcentos7 ~19:58:00]$kill-92440724465[fangbingcentos7 ~19:58:19]$psax-f|grep-emd5sum-ePPIDUIDPIDPPIDC STIME TTY STAT TIME CMD fangbing2455423279019:58 pts/1 S0:00grep--colorauto-emd5sum-ePPID[4] 已杀死nohupmm七、全文重难点总结面试/运维必考进程核心区分程序静态、进程动态、线程是最小执行单元进程状态STATR运行、S睡眠、D不可中断IO、T暂停、Z僵尸前后台管控后台启动、CtrlZ暂停、bg后台运行、fg切前台远程保活nohup简单后台、screen支持断开重连生产首选信号核心9强制杀、15优雅杀、19暂停、18恢复、1挂断顽固进程排查必须溯源杀死父进程仅杀子进程无效批量运维pgrep/pkill/awk管道组合高效批量管理进程结语本文覆盖Linux进程管理90%以上实战场景所有命令均附带注释和实操案例适合新手学习、运维收藏、面试复习直接复制即可落地使用