
Linux 进程管理进程是什么进程是已启动的可执行程序的运行中实例。进程由以下组成部分已分配内存的地址空间安全属性包括所有权凭据和特权程序代码的一个或多个执行线程进程状态进程的环境包括本地和全局变量当前调度上下文分配的系统资源如文件描述符和网络端口查看进程-ps**作用**查看系统中进程信息。ps 命令选项分为两类限定查看哪些进程用来选择进程。对选定的进程查看他们哪些属性。[rootcentos7 ~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进程的开始执行的时刻查看特定用户运行的进程[rootcentos7 ~10:50:03]# ps -u csr uUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND csr33700.00.01596762396? S10:490:00 sshd: csrpts/2 csr33730.00.01163282900pts/2 Ss10:490:00-bash查看特定终端中进程[rootcentos7 ~11:47:31]# ps -t pts/2 uUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND csr33730.00.01163282900pts/2 Ss10:490:00-bash查看所有进程[rootcentos7 ~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? S08:520:00[kworker/0:0H]root60.00.000? S 08:520:00[ksoftirqd/0]root70.00.000? S 08:520:00[migration/0]......查看进程树[rootcentos7 ~10:58:05]# ps axfPID TTY STAT TIME COMMAND2? S0:00[kthreadd]4? S0:00\_[kworker/0:0H]6? S0:00\_[ksoftirqd/0]7? S0:00\_[migration/0]......查看特定进程特定属性# 通过PID限定[rootcentos7 ~11:00:41]# ps -o pid,%cpu,%mem,command 1159PID %CPU %MEM COMMAND# 通过命令名称限定[rootcentos7 ~11:02:20]# ps -C passwd -o pid,ruser,euser,commandPID RUSER EUSER COMMAND对进程进行排序--sort %cpu升序 --sort -%cpu降序[rootcentos7 ~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? S08: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终端列显示的是?号那么该进程肯定是后台进程但并代表显示为其他终端的进程就不是后台进程。[rootcentos7 ~11:41:39]# vim /usr/local/bin/study#!/bin/bashwhiletruedoecho$(date): Im studying [$]study.logsleep1done[rootcentos7 ~13:35:04]# chmod x /usr/local/bin/study任何一个进程都可以在后台启动通过增加一个符号。bash会显示job号和进程的PID。shell不需要等待子进程运行结束而可以继续运行其他命令。# 加 放后台运行[csrcentos7 ~14:13:46]$ study Linux[1]4386[csrcentos7 ~14:13:55]$jobs[1] Running study Linux# 新开窗口动态监控文件study.log内容[csrcentos7 ~14:16:15]$tail-fstudy.log# ctrlZ 暂停前台进程[csrcentos7 ~14:13:57]$ study Python ^Z[2] Stopped study Python[csrcentos7 ~14:20:55]$jobs[1]- Running study Linux[2] Stopped study Python# 将job2放到后台运行[csrcentos7 ~14:21:14]$bg%2[2] study Python[csrcentos7 ~14:26:06]$jobs[1]- Running study Linux[2] Running study Python[csrcentos7 ~14:26:24]$ study MySQL[3]6348[csrcentos7 ~14:28:17]$jobs[1]Running study Linux[2]- Running study Python[3] Running study MySQL# 按ctrlc终止进程运行[csrcentos7 ~14:29:56]$fg%1 study Linux ^C[csrcentos7 ~14:30:25]$fg%2 study Python ^C[csrcentos7 ~14:30:41]$fg%3 study MySQL ^C[csrcentos7 ~14:30:46]$jobs[csrcentos7 ~14:30:52]$给进程发信号kill 命令作用向进程发送信号用于暂停、终止、杀死进程[csrcentos7 ~15:09:55]$catstudyEOF#!/bin/bashwhiletruedoecho-n$study.logsleep1doneEOF[csrcentos7 ~15:10:32]$chmodx study# 新开窗口动态监控文件study.log内容[csrcentos7 ~15:13:38]$ study Linux[1]8063[csrcentos7 ~15:14:16]$ study Python[2]8106# 查看信号清单[csrcentos7 ~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)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)SIGRTMAX[csrcentos7 ~15:17:59]$jobs[1]- Running study Linux[2] Running study Python[csrcentos7 ~15:19:18]$kill-19%1[1] Stopped study Linux[csrcentos7 ~15:19:29]$jobs[1] Stopped study Linux[2]- Running study Python[csrcentos7 ~15:19:35]$kill-18%1[csrcentos7 ~15:20:09]$jobs[1] Running study Linux[2]- Running study Python# 给job id为2的进程发SIGTERM信号终止程序运行该信号是默认信号[csrcentos7 ~15:35:50]$kill-SIGTERM%2[csrcentos7 ~15:36:19]$jobs[1] Running study Linux[2]- Terminated study Python[csrcentos7 ~15:36:25]$jobs[1] Running study Linux# SIGTERM 信号是默认信号[csrcentos7 ~17:51:10]$ study linux[1]22524[csrcentos7 ~17:51:16]$jobs[1] Running study linux[csrcentos7 ~17:51:20]$kill%1[csrcentos7 ~17:53:49]$jobs[1] Terminated study linux[csrcentos7 ~17:53:52]$jobs[csrcentos7 ~17:53:57]$[csrcentos7 ~17:54:42]$ study MySQL[1]22867[csrcentos7 ~17:55:45]$jobs[1] Running study MySQL# 查进程id[csrcentos7 ~17:56:57]$psaxu|grepstudy csr228670.00.01132841432pts/1 S17:550:00 /bin/bash /usr/local/bin/study MySQL csr231710.00.0112808972pts/1 R17:570:00grep--colorauto study[csrcentos7 ~17:57:55]$kill22867[csrcentos7 ~17:58:36]$jobs[1] Terminated study MySQLfg 命令作用只改变进程运行前台 / 后台状态不终止进程。# Ctrlz 暂停进程[csrcentos7 ~17:43:25]$ study linux ^Z[1] Stopped study linux[csrcentos7 ~17:43:52]$jobs[1] Stopped study linux# fg将暂停任务切回前台运行再Ctrlc终止[csrcentos7 ~17:43:58]$fg%1 study linux ^C[csrcentos7 ~17:44:37]$jobs[csrcentos7 ~17:44:41]$pkill 和 pgrep 命令作用给多个进程发信号。# sleep进程是bash进程的子进程[csrcentos7 ~19:02:59]$sleep1231sleep1232sleep1233[1]23981[2]23982[3]23983# 根据进程名查找进程[csrcentos7 ~19:05:17]$ pgrepsleep23980239812398223983[csrcentos7 ~19:06:06]$ pgrep-lsleep23981sleep23982sleep23983sleep23998sleep[csrcentos7 ~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 S19:060:00grep--colorautosleep# 给sleep相关进程发默认信号[csrcentos7 ~19:06:46]$pkillsleeppkill: killing pid24023failed: Operation not permitted[1]Terminatedsleep1231[2]- Terminatedsleep1232[3] Terminatedsleep1233[csrcentos7 ~19:08:32]$psaxu|grepsleeproot240230.00.0108052356? S19:080:00sleep60csr240340.00.0112808976pts/1 S19:080:00grep--colorautosleep# 根据用户名匹配程序[csrcentos7 ~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[csrcentos7 ~19:11:35]$ pgrep-ucsr4117411844744476# kill相应用户所有进程也就是注销用户[csrcentos7 ~19:15:25]$pkill-ucsr Connection closing...Socket close. Connection closed by foreign host....# 根据终端匹配[csrcentos7 ~19:17:59]$sleep1231sleep1232[1]24240[2]24241[csrcentos7 ~19:18:28]$tty/dev/pts/1[csrcentos7 ~19:18:34]$ pgrep-tpts/0-l2076bash[csrcentos7 ~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)[csrcentos7 ~19:32:16]$[csrcentos7 ~19:34:41]$pkill-tpts/0 pkill: killing pid2076failed: Operation not permitted[csrcentos7 ~19:34:56]$pkill-tpts/1[1]- Terminatedsleep1231[2] Terminatedsleep1232# 根据PPID给子进程发信号[csrcentos7 ~19:40:34]$sleep1231sleep1232[1]24467[2]24468[csrcentos7 ~19:40:51]$psjfPPIDPID PGID SID TTY TPGID STATUIDTIME COMMAND24182241842418424184pts/224184Ss10000:00-bash24124241262412624126pts/124469Ss10000:00-bash24126244672446724126pts/124469S10000:00\_sleep123124126244682446824126pts/124469S10000:00\_sleep123224126244692446924126pts/124469R10000:00\_psjf[csrcentos7 ~19:40:58]$pkill-P24126[1]- Terminatedsleep1231[2] Terminatedsleep1232如果pgrep无法过滤出具有特定特征的进程使用ps和kill配合完成。# 环境准备# 暂停多个 yum 安装进程# 按ctrlZ[rootcentos7 ~19:44:02]# yum install httpd...[1] Stopped yuminstallhttpd[rootcentos7 ~19:45:50]# ps axu|grep yumroot245021.62.71059244104856pts/0 T19:440:01 /usr/bin/python /usr/bin/yuminstallhttpd root245310.00.0112808976pts/0 S19:460:00grep--colorauto yum[rootcentos7 ~19:46:01]# ps axu | grep yum | grep -v grep | awk {print $2}24502[rootcentos7 ~19:47:29]# kill -9 $(ps axu|grep yum|grep -v grep| awk {print $2})[rootcentos7 ~19:50:02]# ps axu | grep yum | grep -v grep | awk {print $2}[1] Killed yuminstallhttpdwhoami-who-w-last 命令[csrcentos7 ~19:54:50]$whoamicsr[csrcentos7 ~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)[csrcentos7 ~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[csrcentos7 ~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 掉# 环境准备[csrcentos7 ~19:58:13]$mkdirbin[csrcentos7 ~19:58:17]$catbin/mmEOF#!/bin/bashwhiletruedomd5sum /dev/zerosleep1doneEOF[csrcentos7 ~19:58:46]$chmodx bin/mm[csrcentos7 ~19:59:02]$nohupmm[1]24687# 查找进程[csrcentos7 ~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][csrcentos7 ~20:05:53]$kill24688[csrcentos7 ~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]# 找到父进程[csrcentos7 ~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 S0:00grep--colorauto-emd5sum-ePPID[csrcentos7 ~20:07:58]$kill24687[csrcentos7 ~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 R0:00grep--colorauto-emd5sum-ePPID[1] Terminatednohupmm监控系统负载一、什么是系统负载Load Average系统负载指等待运行的进程队列平均长度记录等待 CPU 调度的进程总数包含正在使用 CPU 的进程等待 CPU 的就绪进程R 运行态不可中断睡眠进程D 阻塞态如磁盘 IO 卡死uptime 或 top 或 w输出三个数值1分钟负载 5分钟负载 15分钟负载# 查看cpu[csrcentos7 ~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......# 查看负载[csrcentos7 ~20:27:12]$uptime20:27:17 up6:55,3users, load average:0.00,0.03,0.17top 命令作用动态查看进程信息包括不同状态任务数量CPU消耗和内存消耗。top命令快捷键常用的命令数字1PMkqh。jobs 与 ps 命令核心区别jobs仅操作当前 Shell 会话内的后台任务是 Shell 内置命令只看本终端窗口里放后台的进程。ps查看系统全部 / 指定进程是独立系统工具能看到服务器所有用户、所有终端、守护进程。