对于进程管理工具平时大多用的是ps,kill,top,sleep等等这些命令,平时linux的一些指令我都会做一些记录,本着好记性不如烂博客的精神,也把进程管理的命令做一点系统性的记录,参考资料基本是鸟哥还有网上的一些文章。
ps
ps命令主要是查看系统进程的状态,平时最常用的命令是ps aux,然后再使用管道导向到grep查找特定的进程,然后进此特定进程进行操作。
要对进程进行操作必须先了解到当前进程的情况,ps命令体现了现实当前运行进程的快照,ps和top和相似,但ps提供了更多的信息,可以确定哪些进程正在运行,哪些进程被挂起,运行了多长时间,以及进行使用的资源和进程的优先级,这些信息对我们都有很重要的作用,当我们使用ps aux可以获得终端所有用户的有关进程信息。
逐列记录:
USER 表示启动进程的用户
PID 表示进程标志号
%CPU 表示该进程占用CPU的时间和进程总运行时间比例
%MEM 表示该进程占用内存的时间和进程总运行时间比例
VSZ 表示占用虚拟内存的大小
RSS 表示占用物理内存的大小
TTY 表示对应的终端号,其中“?”表示不占用终端
STAT 表示进程的几种运行状态,D:不可中断uninterruptible sleep;R:运行runnable;S:睡眠sleeping ;T:停止traced or stopped;Z:僵死a defunct (”zombie”) process;W:没有足够的内存进行分配;<:高优先序的进程;N:低优先序的进程;L:实时系统或I/O
START 表示开始时间
TIME 表示运行了多少时间
COMMAND表示所执行的指令
分享一些常用的ps指令
查看chenyz用户名所运行的进程
root@tech163:/home/chenyz# ps -U chenyz -u chenyz u
查看nginx的进程
root@tech163:/home/chenyz# ps aux | grep nginx
查看使用内存最多的前10个进程
root@tech163:/home/chenyz# ps auxf | sort -nr -k 4 | head -10
查看使用CPU最多的前10个进程
root@tech163:/home/chenyz# ps auxf | sort -nr -k 3 | head -10
pstree
ps能够得到精确的数据,但是数据庞大,这对于掌握系统整体的概括来说不是很容易。pstree刚好可以弥补这个缺憾,进程启动的时候可能会产生自己的一个子进程,使用pstree就能够将当前的程序以树形结构呈现。
kill
kill的工作原理是:想linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作,当需要终端一个前台进程的时候,可以使用ctrl+C进行结束,但对于一个后台进程,一个组合键是无法进行中断的,这个时候就必须使用kill命令。
当我们启动一个后端程序
root@tech163:/home/chenyz# nohup ./hello.sh &
[1] 15100
可以使用ps来查看该进程
root@tech163:/home/chenyz# ps aux | grep hello
root 15100 0.0 0.0 1840 540 pts/0 S 14:57 0:00 /bin/sh ./hello.sh
使用kill %1 或者 kill 15100 来终止该进程。
如果一个程序已经彻底死掉,如果kill pid也没法终止,则需要加上信号强度,最好的办法是加上信号强度 -9 直接杀死父进程。
跟kill相关的还有killall,killall通过程序名来直接杀死所有进程。
top
与ps提供的快照不同的是,top提供了一个当前运行系统实时动态的视图,也就是正在运行的进程,在默认情况下,显示系统中CPU使用率最高的任务,并每5秒刷新一次。
第一行显示了当前时间,登录的用户数,平均负载
第二行显示了所有进程数,运行(running),挂起(sleeping),停止(stopped),无用(zombie)的进程数
第三行显示了CPU的使用情况,用户占得百分比,系统占得百分比,空闲的百分比
第四行显示了物理内存的使用情况,包括可以使用内存,已使用内存,空闲内存,缓冲区内存
第五行显示了交换区的使用情况,包括了总的交换区,使用的,空闲的,用于高速缓存的交换区
第六行重启一段再解释
PID 表示进程标识号
USER 表示该进程的用户名
PR 表示进程的优先级
NI 表示进程的优先级别数值
VIRT 表示进程占用的虚拟内存
RES 表示进程占用的物理内存
SHR 表示进程使用的共享内存值
S 表示进程的状态,运行(running),挂起(sleeping),停止(stopped),无用(zombie)
%CPU 表示占用CPU的使用率
%MEM 表示占用物理内存的使用率
TIME+ 表示该进程占用CPU的总时间
COMMAND 表示进程的命名名称
top是功能非常强大的监控系统,但是它的缺点是消耗很多的系统资源,在系统负载过高的时候查看进程尽量避免使用top。
jobs
如果你想知道有多少进程在后台运行中,那就用jobs的指令吧,如果想知道进程的pid那就是用job -l
先使一个进程运行在后台
root@tech163:/home/chenyz#./hello.sh &
[1] 17299
root@tech163:/home/chenyz# jobs -l
[1]+ 17299 Running ./hello.sh &
因为当前只有一个后台任务在运行,所以后台任务的号码是[1],如果有第二个任务进入后端执行,那么[1]会跟着动态变化。
fg
刚刚我们将./hello.sh &进程放入后端执行,如果想要将后端的进程拿到前端来可以使用fg来处理
root@tech163:/home/chenyz# jobs -l
[1]+ 17299 Running
root@tech163:/home/chenyz# fg %1
./hello.sh
bg
与fg相反的是bg,如果想看到后端程序的运行情况,可以使用fg命令把它调到前台,,bg可以使得多个进程放到后台中执行。
启动一个进程,然后使用ctrl+z暂停,然后使用bg将该进程放入后台执行
root@tech163:/home/chenyz# ./hello.sh
^Z //{ctrl+z}暂停
[1]+ Stopped ./hello.sh
root@tech163:/home/chenyz# jobs;bg %1
[1]+ Stopped ./hello.sh
[1]+ ./hello.sh &
root@tech163:/home/chenyz# jobs
[1]+ Running ./hello.sh &
跟进程管理相关的命令还有很多如nohup,sleep,nice,renice...后续再记录