linux系统管理-进程管理
目录
linux系统管理-进程管理
程序和进程的区别
1.程序是数据和指令的集合,是一个静态的概念,比如/bin/ls、/bin/cp等二进制文件,同时程序可以长期存在系统中。
2.进程是一个程序的运行过程,是一个动态概念,进程是存在生命周期概念的,也就是说进程会随着程序的终止而销毁,不会永远在系统中存在。
进程的生命周期
程序运行是进程的状态关系
1.当父进程接收到任务调度时,会通过fork派生子进程来处理,那么子进程会集成父进程的衣钵。
2.子进程在处理任务代码时,父进程会进入等待的状态...
3.如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成了僵尸进程。
4.每个进程都会有自己的pid号,(process id)子进程则ppid
进程状态管理命令(静态)
使用ps命令查看当前的进程状态(静态查看)
常用组合:ps aux 查看进程
[root@zls ~]# ps aux a:显示所有与终端相关的进程,由终端发起的 u:显示用户导向的用户列表 x:显示所有与终端无关的进程
在多任务处理操作系统中,每个cpu(或核心)在一个时间点上只能处理一个进程。
在进程运行时,它对 cpu 时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。
user pid %cpu %mem vsz rss tty stat start time command user: //启动程序的用户 pid: //进程id %cpu: //占用cpu的百分比 %mem: //占用内存的百分比 vsz: //虚拟内存集(进程占用虚拟内存的空间) rss: //物理内存集(进程占用物理内存的空间) tty: //运行的终端 ?: #内核运行的终端 tty1: #机器运行的终端 pts/0: #远程连接的终端 stat: //进程状态 d: #无法中断的休眠状态(通io的进程) r: #正在运行的状态 s: #处于休眠的状态 t: #暂停或被追踪的状态 w: #进入内存交换(从内核2.6开始无效) x: #死掉的进程(少见) z: #僵尸进程 <: #优先级高的进程 n: #优先级较低的进程 l: #有些页被锁进内存 s: #父进程(在它之下有子进程开启着) +: #该进程运行在前台 l: #以线程的方式运行 |: #多进程的 start: //进程被触发开启的时间 time: //该进程实际使用cpu的运行时间 command: //命令的名称和参数 [] : #内核态的进程 没[]: #用户态的进程
进程的相关命令
#对进程的cpu进行排序展示 [root@zls ~]# ps aux --sort %cpu |less #对进程的占用物理内存排序 [root@zls ~]# ps aux --sort rss |less #排序,是在记不住,那就自己排序 [root@zls ~]# ps aux|sort -k3 -n #自定义显示字段 [root@zls ~]# ps axo user,pid,ppid,%mem,command |grep sshd root 869 1 0.2 /usr/sbin/sshd -d root 1194 869 0.2 sshd: root@pts/0 root 1307 869 0.2 sshd: root@pts/1 root 1574 869 0.2 sshd: root@pts/2 #显示进程的子进程 [root@zls ~]# yum install nginx -y [root@zls ~]# systemctl start nginx [root@zls ~]# ps auxf|grep [n]ginx root 2033 0.0 0.1 125096 2112 ? ss 13:29 0:00 nginx: master process /usr/sbin/nginx nginx 2034 0.0 0.1 125484 3148 ? s 13:29 0:00 \_ nginx: worker process #查看指定进程pid [root@zls ~]# ps aux|grep sshd root 1157 0.0 0.1 105996 3604 ? ss feb27 0:00 /usr/sbin/sshd -d [root@zls ~]# cat /run/sshd.pid 1157 #pgrep常用参数, -l -a [root@zls ~]# pgrep sshd 869 1194 1307 1574 [root@zls ~]# pgrep -l sshd 869 sshd 1194 sshd 1307 sshd 1574 sshd [root@zls ~]# pgrep -l -a sshd 869 /usr/sbin/sshd -d 1194 sshd: root@pts/0 1307 sshd: root@pts/1 1574 sshd: root@pts/2 #查看进程的pid [root@zls ~]# pidof sshd 1574 1307 1194 869 #查看进程树 [root@zls ~]# pstree
动态进程监控(top)
top前两行内容解析
第一行内容: 当前系统时间 服务器运行时间 有3个用户在登录 top - 10:54:23 up 1 day, 17:56, 3 users, #平均负载(系统) load average: 0.00, 0.01, 0.05 第二行内容: 总共122个任务 1个正在运行(r) 121个进入睡眠状态的(s) 没有停止(t)tasks: 122 total, 1 running, 121 sleeping, 0 stopped, 0个僵尸进程(z) 0 zombie
第三行内容
用户态 内核态 优先级 空闲 等待(wait) 硬中断 软中断 %cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 虚拟机占用物理机cpu的百分比 0.0 st
第四行:内存
kib mem : 2028116 total, 150780 free, 144108 used, 1733228 buff/cache
第五行:swap虚拟内存
kib swap: 2097148 total, 2097148 free, 0 used. 1645080 avail mem
第六行
pid user pr ni virt res shr s %cpu %mem 进程号 用户 优先级 虚拟内存 物理内存 共享内存 状态 占cpu百分比 占内存百分比 time+ command 运行时间 进程的运行命令
中断:硬中断
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的终端处理程序来影响设备的请求。
软中断:
事实上,为了解决中断处理程序执行过长的和丢失中断的问题,linux将中断处理过程分成了两个阶段:
第一阶段:用来快速处理(硬中断)中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关工作
第二阶段:用来延迟处理第一阶段未完成的工作,通常以内核线程的方式运行。
例如:
第一阶段:当你接到第一个配送员电话时,你可以跟他说,你已经知道了,其他事见面再细说,然后就可以挂断电话了。
第二阶段:才是取外卖,然后见面聊发票的处理动作。
如此一来,第一个配送员不会在电话里占用你很长时间,第二个配送员来的时候,照样可以打通电话。
top命令的使用
[root@zls ~]# top #指定n秒变化时间 [root@zls ~]# top -d 1 #查看指定进程的动态信息 [root@zls ~]# top -d 1 -p 10126 [root@zls ~]# top -d 1 -p 10126,1 #查看指定用户的进程 [root@zls ~]# top -d 1 -u apache #将 2 次 top 信息写入到文件 [root@zls ~]# top -d 1 -b -n 2 > top.txt top 常见指令 h 查看帮出 z 高亮显示 1 显示所有cpu的负载 s 设置刷新时间 b 高亮现实处于r状态的进程 m 按内存使用百分比排序输出 p 按cpu使用百分比排序输出 r 对排序进行反转 f 自定义显示字段 k kill掉指定pid进程 w 保存top环境设置 ~/.toprc q 退出
信号管理进程(kill)
当程序运行为进程后,如果希望强行停止就可以使用kill命令对进程发送关闭信号
,除了kill还有pkill、killall
定义守护进程的角色
结束用户会话和进程
[root@zls ~]# kill -l //列出所有支持的信号 //常见信号列表: 数字信号 信号别名 作用 1 hup 挂起信号,往往可以让进程重新配置 2 int 中断信号,起到结束进程的作用,和ctrl + c 的作用一样 3 quit 让进程退出,结果是进程退出 9 kill 直接结束进程,不能被进程捕获 15 term 进程终止,这是默认信号 18 cont 被暂停的进程将继续恢复运行 19 stop 暂停进程 20 tstp 用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停
kill命令发送指令
// 给 vsftpd 进程发送信号 1,15 [root@zls ~]# yum -y install vsftpd [root@zls ~]# systemctl start vsftpd //发送重启信号,例如 vsftpd 的配置文件发生改变,希望重新加载 [root@zls ~]# kill -1 9160 //发送停止信号,vsftpd 服务有停止的脚本 systemctl stop vsftpd [root@zls ~]# kill 9160 // 给vim进程发送信号 9,15 [root@zls ~]# touch file1 file2 //使用远程终端1打开file1 [root@zls ~]# tty /dev/pts/1 [root@zls ~]# vim file1 //使用远程终端2打开file2 [root@zls ~]# tty /dev/pts/2 [root@zls ~]# vim file2 //查看当前进程pid [root@zls ~]# ps aux |grep vim root 4362 0.0 0.2 11104 2888 pts/1 s+ 23:02 0:00 vim file1 root 4363 0.1 0.2 11068 2948 pts/2 s+ 23:02 0:00 vim file2 //发送15信号 [root@zls ~]# kill 4362 //发送9信号 [root@zls ~]# kill -9 4363 //还可以同时给所有vim进程发送信号, 模糊匹配,同时给多个进程发送信号 [root@zls ~]# killall vim //使用pkill踢出从远程登录到本机的用户, pkill 类似killall [root@zls ~]# w 20:50:17 up 95 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00 user tty from login@ idle jcpu pcpu what xuliangw pts/0 115.175.115.39 20:22 0.00s 0.01s 0.00s sshd: zls [priv] //终止 pts/0上所有进程, 除了bash本身 [root@zls ~]# pkill -t pts/0 //终止pts/0上所有进程, 并且bash也结束(用户被强制退出) [root@zls ~]# pkill -9 -t pts/0 //列出zls用户的所有进程,-l输出pid [root@linux-zls ~]# pgrep -l -u zls 32206 sshd 32207 bash