ps、pstree、top、htop、nice、renice、kill、ulimit、w 和 who 和 whoami、pgrep、fg 和 bg、ipcs
示例:
ps -a - 列出所有运行中/激活进程
ps -ef |grep - 列出需要进程
ps -aux - 显示进程信息,包括无终端的(x)和针对用户(u)的进程:如USER, PID, %CPU, %MEM等
pstree :linux中每一个进程都是由其父进程创建的。pstree以可视化方式显示进程,通过显示进程的树状图来展示进程间关系。如果指定了pid了,那么树的根是该pid,不然将会是init(pid: 1)。
top:实时的监控系统状态信息和进程所使用的资源。显示进程的数据包括 PID、进程属主、优先级、%CPU、%memory等。可以使用这些显示指示出资源使用量。
nice:通过 nice 命令的帮助,用户可以设置和改变进程的优先级。提高一个进程的优先级,内核会分配更多CPU时间片给这个进程。默认情况下,进程以 0 的优先级启动。进程优先级可以通过 top 命令显示的 NI(nice value)列查看。
进程优先级值的范围从-20到19。值越低,优先级越高。nice <优先值> <进程名> - 通过给定的优先值启动一个程序
renice:renice 命令类似 nice 命令。使用这个命令可以改变正在运行的进程优先值。
注意,用户只能改变属于他们自己的进程的优先值。
renice -n -p - 改变指定进程的优先值
renice -u -g - 通过指定用户和组来改变进程优先值
kill :用来发送信号给进程,并结束进程。如果一个进程没有响应杀死命令,这也许就需要强制杀死,使用 -9 参数来执行。
kill <pid> --- 使用 kill 时候,需要知道进程ID号,可以通过 ps 命令得到 进程号
kill -9 <pid> --- 杀死进程
killall -9 <进程名> --- 杀死所有拥有同样名字的进程
pkill <进程名> --- pkill 是类似的命令,但使用模式匹配,如进程名,进程拥有者等。
ulimit :控制系统资源在shell和进程上的分配量。对于系统管理员是最有用的,可以管理重度使用和存在性能问题的系统。限制资源大小可以确保重要进程持续运行,其他进程不会占用过多资源。
-f - 最大文件尺寸大小
-v - 最大虚拟内存大小(KB)
-n - 增加最大文件描述符数量
-H : 改变和报告硬限制
-S : 改变和报告软限制
ulimit -a - 显示当前用户关联的资源限制
w :显示当前登录的用户及其正在执行的进程的信息。
显示信息头包含信息,如当前时间、系统运行时长、登录用户总数、过去的1,5,15分钟内的负载均衡数。基于这些用户信息,用户在终止不属于他们的进程时要小心。
who: 和 w 类似的命令,提供当前登录用户列表、系统启动时间、运行级别等。
whoami : 输出当前用户ID。
fg 、bg:fg 即 frontgroud,表示 前台。 bg 即 background,表示 后台。
使用 “bg” 命令可以将任务放在后台执行。使用 “fg” 命令可以将任务调到前台执行。
可以通过 & 在后台启动一个程序: find . -name *iso > /tmp/res.txt &
一个正在运行的程序也可以通过 “CTRL+Z” 和 “bg” 命令组合放到后台运行。
find . -name *iso > /tmp/res.txt & // 启动一个程序
ctrl+z // 挂起当前执行程序
bg // 将程序放到后台运行
jobs :列出所有后台进程。
ipcs :ipcs 命令报告进程间通信设施状态。(共享内存,信号量和消息队列)
用 -p 参数联合 -m、-s 或 -q 使用,可以获得相关的进程间通信的进程ID。
示例:ipcs -p -m
ps 工具标识进程的 5 种状态码:
R运行状态(runing): 表明进程要么在运行中要么在运行队列里,并不意味着进程一定在运行中。
S睡眠状态(sleeping):意味着进程在等待事件的完成(这里的睡眠有时候也叫做可中断睡眠)
D磁盘睡眠状态(Disk sleep): 有时候也叫做不可中断睡眠,在这个状态的进程通常会等待IO的结束
T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的进程可以通过发送SIGCNT信号让进程继续运行。
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
Z(zombie)-僵尸进程 :下面会详细介绍
ps aux 列出目前所有的正在内存当中的程序
输出格式 :
USER: 进程所有者
PID: 进程ID
%CPU: 占用的 CPU 使用率
%MEM: 占用的内存使用率
VSZ: 占用的虚拟内存大小
RSS: 占用的内存大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 进程状态:
START: 启动进程的时间;
TIME: 进程消耗CPU的时间;
COMMAND: 命令的名称和参数;
ps -ef 显示所有进程信息,连同命令行
ps -ef | grep ssh ps 与grep 常用组合用法,查找特定进程
首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每个终止子进程保存了一定量的信息。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间。
所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息。一个进程执行了exit系统调用退出,其父进程并没有为它收尸(调用wait或waitpid来获得它的结束状态),另外子进程退出的时候会向其父进程发送SIGCHLD信号,父进程默认忽略SIGCHLD信号不进行处理,那么子进程将一直保持在僵尸状态,如果这时父进程结束了,init进程自动接收这个子进程,但如果父进程是一个循环,不会结束,那么子进程就会一直保持僵死状态。
在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存。但是仍然保留了一些信息(如进程号pid 退出状态 运行时间等)。如果没有调用wait/waitpid的话,那么保留的信息就不会释放。比如进程号就会被一直占用了。但系统所能使用的进程号的有限的,如果产生大量的僵尸进程,将导致系统没有可用的进程号而导致系统不能创建进程。
SIGCHLD信号产生的条件
1.子进程终止时会向父进程发送SIGCHLD信号,告知父进程回收自己,但该信号的默认处理动作为忽略,因此父进程仍然不会去回收子进程,需要捕捉处理实现子进程的回收;
2.子进程接收到SIGSTOP(19)信号停止时;
3.子进程处在停止态,接受到SIGCONT后唤醒时。
1.进程的退出状态必须被维持下去,因为他要关心他的进程(父进程),父进程如果一直不读取,那子进程一直处于Z状态
2.维护退出状态本身就是要用数据维护,也属于进程的基本信息,所以保存在task_struct中,换句话说,Z状态一直不退出,PCB就要一直维护
3.父进程创建了很多子进程,就是不回收,就会造成内存资源的浪费,因为数据结构对象本身就要占用内存。
4.内存泄露