再也不怕进程卡死!Linux 进程查看、杀进程、后台任务全攻略
2026/7/22 3:30:42 网站建设 项目流程

Linux 进程管理

进程是什么

进程是已启动的可执行程序的运行中实例。

进程由以下组成部分:

  • 已分配内存的地址空间
  • 安全属性,包括所有权凭据和特权
  • 程序代码的一个或多个执行线程
  • 进程状态

进程的环境包括:

  • 本地和全局变量
  • 当前调度上下文
  • 分配的系统资源,如文件描述符和网络端口

查看进程-ps

**作用:**查看系统中进程信息。

ps 命令选项分为两类:

  • 限定查看哪些进程,用来选择进程。
  • 对选定的进程查看他们哪些属性。
[root@centos7 ~10:43:30]# ps -ef | head -n 5UIDPIDPPIDC STIME TTY TIME CMD root10008:52 ? 00:00:01 /usr/lib/systemd/systemd --switched-root--system--deserialize22root20008:52 ? 00:00:00[kthreadd]root42008:52 ? 00:00:00[kworker/0:0H]root62008:52 ? 00:00:00[ksoftirqd/0]# UID,进程的执行者# PPID,进程的父进程ID# C,进程消耗的CPU百分比# STIME,进程的开始执行的时刻

查看特定用户运行的进程

[root@centos7 ~10:50:03]# ps -u csr uUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND csr33700.00.01596762396? S10:490:00 sshd: csr@pts/2 csr33730.00.01163282900pts/2 Ss+10:490:00-bash

查看特定终端中进程

[root@centos7 ~11:47:31]# ps -t pts/2 uUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND csr33730.00.01163282900pts/2 Ss+10:490:00-bash

查看所有进程

[root@centos7 ~10:52:42]# ps axuUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root10.00.11256244184? Ss 08:520:01 /usr/lib/system root20.00.000? S 08:520:00[kthreadd]root40.00.000? S<08:520:00[kworker/0:0H]root60.00.000? S 08:520:00[ksoftirqd/0]root70.00.000? S 08:520:00[migration/0]......

查看进程树

[root@centos7 ~10:58:05]# ps axfPID TTY STAT TIME COMMAND2? S0:00[kthreadd]4? S<0:00\_[kworker/0:0H]6? S0:00\_[ksoftirqd/0]7? S0:00\_[migration/0]......

查看特定进程特定属性

# 通过PID限定[root@centos7 ~11:00:41]# ps -o pid,%cpu,%mem,command 1159PID %CPU %MEM COMMAND# 通过命令名称限定[root@centos7 ~11:02:20]# ps -C passwd -o pid,ruser,euser,commandPID RUSER EUSER COMMAND

对进程进行排序--sort %cpu升序 ,--sort -%cpu降序

[root@centos7 ~11:06:28]# ps axu --sort -%cpuUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root312199.90.0108068620pts/0 R10:2837:51 md5sum /dev/zer root10.00.11256244184? Ss 08:520:01 /usr/lib/system root20.00.000? S 08:520:00[kthreadd]root40.00.000? S<08:520:00[kworker/0:0H]root60.00.000? S 08:520:00[ksoftirqd/0]root70.00.000? S 08:520:00[migration/0]

控制 jobs

前台进程和后台进程

作业控制允许单个shell实例运行和管理多个命令。

  • 前台进程,一个终端中只有一个前台进程,该进程可以终端窗口中读取输入和响应键盘生成的信号
  • 后台进程,在后台运行的进程,该进程不能从终端读取输入或接收键盘产生的中断。后台进程可能暂停,也可能正在运行。如果正在运行的后台作业尝试从终端读取,它将自动暂停。在ps列表中,tty终端列显示的是?号,那么该进程肯定是后台进程,但并代表显示为其他终端的进程就不是后台进程。
[root@centos7 ~11:41:39]# vim /usr/local/bin/study#!/bin/bashwhiletruedoecho"$(date): I'm studying [$@]">>study.logsleep1done[root@centos7 ~13:35:04]# chmod +x /usr/local/bin/study

任何一个进程都可以在后台启动,通过增加一个&符号。

bash会显示job号和进程的PID。shell不需要等待子进程运行结束,而可以继续运行其他命令。

# 加 & 放后台运行[csr@centos7 ~14:13:46]$ study Linux&[1]4386[csr@centos7 ~14:13:55]$jobs[1]+ Running study Linux&# 新开窗口动态监控文件study.log内容[csr@centos7 ~14:16:15]$tail-fstudy.log# ctrl+Z 暂停前台进程[csr@centos7 ~14:13:57]$ study Python ^Z[2]+ Stopped study Python[csr@centos7 ~14:20:55]$jobs[1]- Running study Linux&[2]+ Stopped study Python# 将job2放到后台运行[csr@centos7 ~14:21:14]$bg%2[2]+ study Python&[csr@centos7 ~14:26:06]$jobs[1]- Running study Linux&[2]+ Running study Python&[csr@centos7 ~14:26:24]$ study MySQL&[3]6348[csr@centos7 ~14:28:17]$jobs[1]Running study Linux&[2]- Running study Python&[3]+ Running study MySQL&# 按ctrl+c终止进程运行[csr@centos7 ~14:29:56]$fg%1 study Linux ^C[csr@centos7 ~14:30:25]$fg%2 study Python ^C[csr@centos7 ~14:30:41]$fg%3 study MySQL ^C[csr@centos7 ~14:30:46]$jobs[csr@centos7 ~14:30:52]$

给进程发信号

kill 命令

作用:向进程发送信号,用于暂停、终止、杀死进程

[csr@centos7 ~15:09:55]$cat>study<<EOF>#!/bin/bash>whiletrue>do>echo-n"$@">>study.log>sleep1>done>EOF[csr@centos7 ~15:10:32]$chmod+x study# 新开窗口动态监控文件study.log内容[csr@centos7 ~15:13:38]$ study Linux&[1]8063[csr@centos7 ~15:14:16]$ study Python&[2]8106# 查看信号清单[csr@centos7 ~15:14:36]$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)SIGRTMIN+136)SIGRTMIN+237)SIGRTMIN+338)SIGRTMIN+439)SIGRTMIN+540)SIGRTMIN+641)SIGRTMIN+742)SIGRTMIN+843)SIGRTMIN+944)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)SIGRTMIN+1348)SIGRTMIN+1449)SIGRTMIN+1550)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)SIGRTMAX[csr@centos7 ~15:17:59]$jobs[1]- Running study Linux&[2]+ Running study Python&[csr@centos7 ~15:19:18]$kill-19%1[1]+ Stopped study Linux[csr@centos7 ~15:19:29]$jobs[1]+ Stopped study Linux[2]- Running study Python&[csr@centos7 ~15:19:35]$kill-18%1[csr@centos7 ~15:20:09]$jobs[1]+ Running study Linux&[2]- Running study Python&# 给job id为2的进程发SIGTERM信号,终止程序运行,该信号是默认信号[csr@centos7 ~15:35:50]$kill-SIGTERM%2[csr@centos7 ~15:36:19]$jobs[1]+ Running study Linux&[2]- Terminated study Python[csr@centos7 ~15:36:25]$jobs[1]+ Running study Linux&# SIGTERM 信号是默认信号[csr@centos7 ~17:51:10]$ study linux&[1]22524[csr@centos7 ~17:51:16]$jobs[1]+ Running study linux&[csr@centos7 ~17:51:20]$kill%1[csr@centos7 ~17:53:49]$jobs[1]+ Terminated study linux[csr@centos7 ~17:53:52]$jobs[csr@centos7 ~17:53:57]$[csr@centos7 ~17:54:42]$ study MySQL&[1]22867[csr@centos7 ~17:55:45]$jobs[1]+ Running study MySQL&# 查进程id[csr@centos7 ~17:56:57]$psaxu|grepstudy csr228670.00.01132841432pts/1 S17:550:00 /bin/bash /usr/local/bin/study MySQL csr231710.00.0112808972pts/1 R+17:570:00grep--color=auto study[csr@centos7 ~17:57:55]$kill22867[csr@centos7 ~17:58:36]$jobs[1]+ Terminated study MySQL

fg 命令

作用:只改变进程运行前台 / 后台状态,不终止进程

# Ctrl+z 暂停进程[csr@centos7 ~17:43:25]$ study linux ^Z[1]+ Stopped study linux[csr@centos7 ~17:43:52]$jobs[1]+ Stopped study linux# fg将暂停任务切回前台运行,再Ctrl+c终止[csr@centos7 ~17:43:58]$fg%1 study linux ^C[csr@centos7 ~17:44:37]$jobs[csr@centos7 ~17:44:41]$

pkill 和 pgrep 命令

作用:给多个进程发信号。

# sleep进程是bash进程的子进程[csr@centos7 ~19:02:59]$sleep1231&sleep1232&sleep1233&[1]23981[2]23982[3]23983# 根据进程名查找进程[csr@centos7 ~19:05:17]$ pgrepsleep23980239812398223983[csr@centos7 ~19:06:06]$ pgrep-lsleep23981sleep23982sleep23983sleep23998sleep[csr@centos7 ~19:06:22]$psaxu|grepsleepcsr239810.00.0108052356pts/1 S19:050:00sleep1231csr239820.00.0108052360pts/1 S19:050:00sleep1232csr239830.00.0108052356pts/1 S19:050:00sleep1233root239980.00.0108052352? S19:060:00sleep60csr240070.00.0112808976pts/1 S+19:060:00grep--color=autosleep# 给sleep相关进程发默认信号[csr@centos7 ~19:06:46]$pkillsleeppkill: killing pid24023failed: Operation not permitted[1]Terminatedsleep1231[2]- Terminatedsleep1232[3]+ Terminatedsleep1233[csr@centos7 ~19:08:32]$psaxu|grepsleeproot240230.00.0108052356? S19:080:00sleep60csr240340.00.0112808976pts/1 S+19:080:00grep--color=autosleep# 根据用户名匹配程序[csr@centos7 ~19:08:52]$ps-ucsr PID TTY TIME CMD4117? 00:00:00 sshd4118pts/1 00:00:00bash4474? 00:00:00 sshd4476pts/2 00:00:00bash24072pts/1 00:00:00ps[csr@centos7 ~19:11:35]$ pgrep-ucsr4117411844744476# kill相应用户所有进程,也就是注销用户[csr@centos7 ~19:15:25]$pkill-ucsr Connection closing...Socket close. Connection closed by foreign host....# 根据终端匹配[csr@centos7 ~19:17:59]$sleep1231&sleep1232&[1]24240[2]24241[csr@centos7 ~19:18:28]$tty/dev/pts/1[csr@centos7 ~19:18:34]$ pgrep-tpts/0-l2076bash[csr@centos7 ~19:19:27]$whoroot pts/02026-07-2113:34(192.168.50.245)csr pts/12026-07-2119:16(192.168.50.245)csr pts/22026-07-2119:16(192.168.50.245)[csr@centos7 ~19:32:16]$[csr@centos7 ~19:34:41]$pkill-tpts/0 pkill: killing pid2076failed: Operation not permitted[csr@centos7 ~19:34:56]$pkill-tpts/1[1]- Terminatedsleep1231[2]+ Terminatedsleep1232# 根据PPID,给子进程发信号[csr@centos7 ~19:40:34]$sleep1231&sleep1232&[1]24467[2]24468[csr@centos7 ~19:40:51]$psjfPPIDPID PGID SID TTY TPGID STATUIDTIME COMMAND24182241842418424184pts/224184Ss+10000:00-bash24124241262412624126pts/124469Ss10000:00-bash24126244672446724126pts/124469S10000:00\_sleep123124126244682446824126pts/124469S10000:00\_sleep123224126244692446924126pts/124469R+10000:00\_psjf[csr@centos7 ~19:40:58]$pkill-P24126[1]- Terminatedsleep1231[2]+ Terminatedsleep1232

如果pgrep无法过滤出具有特定特征的进程,使用ps和kill配合完成。

# 环境准备# 暂停多个 yum 安装进程# 按ctrl+Z[root@centos7 ~19:44:02]# yum install httpd...[1]+ Stopped yuminstallhttpd[root@centos7 ~19:45:50]# ps axu|grep yumroot245021.62.71059244104856pts/0 T19:440:01 /usr/bin/python /usr/bin/yuminstallhttpd root245310.00.0112808976pts/0 S+19:460:00grep--color=auto yum[root@centos7 ~19:46:01]# ps axu | grep yum | grep -v grep | awk '{print $2}'24502[root@centos7 ~19:47:29]# kill -9 $(ps axu|grep yum|grep -v grep| awk '{print $2}')[root@centos7 ~19:50:02]# ps axu | grep yum | grep -v grep | awk '{print $2}'[1]+ Killed yuminstallhttpd

whoami-who-w-last 命令

[csr@centos7 ~19:54:50]$whoamicsr[csr@centos7 ~19:54:58]$whoroot pts/02026-07-2113:34(192.168.50.245)csr pts/12026-07-2119:16(192.168.50.245)csr pts/22026-07-2119:16(192.168.50.245)[csr@centos7 ~19:55:07]$ w19:55:12 up6:23,3users, load average:0.00,0.01,0.04USERTTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0192.168.50.24513:3432.00s0.09s0.09s-bashcsr pts/1192.168.50.24519:160.00s0.04s0.00s w csr pts/2192.168.50.24519:1638:440.01s0.01s-bash[csr@centos7 ~19:55:12]$ last csr pts/2192.168.50.245 Tue Jul2119:16 still loggedincsr pts/1192.168.50.245 Tue Jul2119:16 still loggedincsr pts/2192.168.50.245 Tue Jul2114:14 -19:15(05:01)root pts/2192.168.50.245 Tue Jul2114:14 -14:14(00:00)...

案例:kill 不掉的进程

一个进程杀掉之后,又出现了。怎么让这个程序永久 kill 掉

# 环境准备[csr@centos7 ~19:58:13]$mkdirbin[csr@centos7 ~19:58:17]$cat>bin/mm<<EOF>#!/bin/bash>whiletrue>do>md5sum /dev/zero>sleep1>done>EOF[csr@centos7 ~19:58:46]$chmod+x bin/mm[csr@centos7 ~19:59:02]$nohupmm&[1]24687
# 查找进程[csr@centos7 ~20:04:40]$psaxo pid,%cpu,command--sort-%cpu|head-n5PID %CPU COMMAND24688100md5sum /dev/zero10.0/usr/lib/systemd/systemd --switched-root--system--deserialize2220.0[kthreadd]40.0[kworker/0:0H][csr@centos7 ~20:05:53]$kill24688[csr@centos7 ~20:06:17]$psaxo pid,%cpu,command--sort-%cpu|head-n5PID %CPU COMMAND24791100md5sum /dev/zero10.0/usr/lib/systemd/systemd --switched-root--system--deserialize2220.0[kthreadd]40.0[kworker/0:0H]# 找到父进程[csr@centos7 ~20:06:25]$psax-f|grep-emd5sum-ePPIDUIDPIDPPIDC STIME TTY STAT TIME CMD csr24791246879920:06 pts/1 R1:39 md5sum /dev/zero csr2480924126020:07 pts/1 S+0:00grep--color=auto-emd5sum-ePPID[csr@centos7 ~20:07:58]$kill24687[csr@centos7 ~20:10:45]$psax-f|grep-emd5sum-ePPIDUIDPIDPPIDC STIME TTY STAT TIME CMD csr2479119920:06 pts/1 R4:30 md5sum /dev/zero csr2484524126020:10 pts/1 R+0:00grep--color=auto-emd5sum-ePPID[1]+ Terminatednohupmm

监控系统负载

一、什么是系统负载(Load Average)

系统负载指等待运行的进程队列平均长度,记录等待 CPU 调度的进程总数,包含:

  1. 正在使用 CPU 的进程
  2. 等待 CPU 的就绪进程(R 运行态)
  3. 不可中断睡眠进程(D 阻塞态,如磁盘 IO 卡死)

uptime 或 top 或 w输出三个数值:1分钟负载, 5分钟负载, 15分钟负载

# 查看cpu[csr@centos7 ~20:25:28]$ lscpu Architecture: x86_64 CPU op-mode(s):32-bit,64-bit Byte Order: Little Endian CPU(s):2On-line CPU(s)list:0,1Thread(s)per core:1Core(s)per socket:1Socket(s):2......# 查看负载[csr@centos7 ~20:27:12]$uptime20:27:17 up6:55,3users, load average:0.00,0.03,0.17

top 命令

作用:动态查看进程信息,包括不同状态任务数量,CPU消耗和内存消耗。

top命令快捷键

常用的命令:数字1,P,M,k,q,h。

jobs 与 ps 命令核心区别

jobs

仅操作当前 Shell 会话内的后台任务,是 Shell 内置命令,只看本终端窗口里放后台的进程。

ps

查看系统全部 / 指定进程,是独立系统工具,能看到服务器所有用户、所有终端、守护进程。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询