Linux查看进程的一些方法
ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。-e:显示系统内的所有进程信息。-l
ps
ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
-e:显示系统内的所有进程信息。
-l:使用长(long)格式显示进程信息。
-f:使用完整的(full)格式显示进程信息字段(UID,PPIP,C,STIME字段)。
-a:显示当前终端下的所有进程信息,包括其他用户的进程
-u:显示当前用户进程和内存使用情况,以用户为主的格式输出进程信息
-x:显示没有控制终端的进程,显示当前用户在所有终端下的进程
-sort:按照列名排序
ps -elf
UID:用户ID,即进程的拥有者,输出的是用户名
PID:进程ID
PPID:父进程ID
C:进程占用的CPU百分比
STIME:进程开始启动到现在的时间
TTY:登入者的终端机位置,该进程在哪个终端上运行,若与终端无关,则显示?,若为pts/0等,则表示由网络连接主机进程
TIME:进程使用的CPU(运算)时间
CMD:调用进程的命令的名称和参数
ps -aux
上述显示中,USER表示该进程的用户,PID表示进程ID,%CPU是CPU占用率,%MEM是内存占用率,VSZ是占用虚拟内存,RSS是占用实际内存,TTY是指进程运行的终端,STAT是指进程运行的状态,START是进程启动的时间,TIME是进程占用CPU的时间,COMMAND是进程对应的程序
STAT:显示了进程当前的状态,如S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、+(前台进程),对处于僵死状态的进程应予以手动终止。
STAT一列中,进程状态含义:
D 无法中断的休眠状态 (通常 IO 的进程)
R 正在执行中
S 静止状态,可中断睡眠
T 暂停执行,停止的进程
Z 僵尸进程,不存在但暂时无法消除
W 没有足够的记忆体分页可分配
< 高优先序的行程
N 低优先序的行程
L 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
X:死掉的进程
Ss:表示该进程是一个父进程,本身有子进程
S<:表示优先级较高的进程
SN:表示优先级较低的进程
R+:表示前台进程
Sl:表示以线程方式运行的进程
USER:启动该进程的用户账号名称
PID:该进程的ID号,在当前系统中是唯一的
%CPU:占用的 CPU 使用率
%MEM:内存占用的百分比
VSZ:占用虚拟内存(swap空间)的大小
RSS:占用常驻内存(物理内存)的大小
TTY:该进程在哪个终端上运行。“?”表未知或不需要终端,终端的次要装置号码 (minor device number of tty)
START:启动该进程的时间
TIME:该进程占用CPU时间
COMMAND:启动该进程的命令的名称
ps -A和-a的区别
ps a 显示现行终端机下的所有程序,包括其他用户的程序,除了session leaders和关联终端的进程
ps -A 显示所有程序进程
ps的aux和-elf区别
1、输出风格不同
两者的输出结果差别不大,但展示风格不同。aux是BSD风格,-elf是System V风格。
2、aux会截断command列,而-ef不会,当结合grep时这种区别会影响到结果
一直以为ps aux就可以列出所有的在运行进程,最近发现还是有些缺陷,用ps aux和-ef得到的结果居然不一样,以后尽量用-ef参数吧。
情况是这样的,我用 /bmrt/blaph/blaph/bmgctl来启动进程,由于ps aux是用BSD格式来显示结果,所以可能只会显示到/bmrt/blaph/blap,后面的都被截掉了。
这样,如果用 ps aux | grep bmgctl 来过滤该进程,可能就会误伤,获取不到bmgctl进程。
而ps -ef是用全格式的System V格式,显示出来就是带全路径的进程名,会显示出bmgctl,在 ps -ef | grep bmgctl 命令下就可以完整显示该进程了。
静态查看进程信息,可接受多种选项:
UNIX选项,需加破折号(-);
BSD选项,不需加破折号(-);
GNU长选项,需加两个破折号(-);
ps l
ps -l
F:该进程标志,说明进程权限
1:仅可复制,不可执行
4:进程权限为root
S:该进程状态,如R、S、D、T、Z
PRI:该进程优先级,值越小优先级越高
NI:该进程nice值
ADDR:该进程的内存地址
SZ:该进程交换空间大小
WCHAN:显示休眠进程的系统函数名
top
top命令可以动态查看进程,以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次,其作用基本类似于Windows系统中的任务管理器。
top命令常用参数如下:
-d 表示刷新的时间间隔,单位为s,如:top -d 5 : 指定显示信息更新时间间隔为5秒
-p 表示查看指定PID的进程
-u 表示查看指定用户的进程
-n 表示top刷新指定次数后退出
top命令使用示例:
top -d 1
top -p 100
top -n 3 >123.txt
top -u nginx
上述四条命令都表示用top查看系统进程,第一条命令表示刷新时间为1秒,第二条命令表示只查看PID100的进程,第三条表示将top刷新3次的结果写入到123.txt文档中,第四条表示只显示用户为Nginx的进程。
top命令执行后结果如下:
此时按下q键退出查看状态。
Tasks(系统任务)信息:total,总进程数;running,正在运行的进程数;sleeping,休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
CPU信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。了解空闲的CPU百分比,主要看%id部分。
Mem(内存)信息:total,总内存空间;used,已用内存;free,空闲内存;buffers,缓存区域。
Swap(交换空间)信息:total,总交换空间;used,已用交换空间;free,空闲交换空间;cached,缓存空间。
按键操作
P,根据CPU使用百分比排序;
M,根据物理内存大小排序;
N,根据启动时间排序;
c,切换显示命令名称和完整命令行;
h,获得top进程在线帮助信息;
k,根据提示输入进程PID,并按Enter终止对应进程;
1,显示CPU个数和状态;
pstree
以树状图的方式展现进程之间的派生关系,显示效果比较直观。
-a:显示每个程序的完整指令,包含路径,命令行参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序;
-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l:采用长列格式显示树状图;
-n:用程序识别码排序。预设是以程序名称来排序;
-p:显示PID;
-u:显示用户名称;
pstree -aup
可以带上|grep 查询特定进程。例如 pstree -aup | grep php
psgrep
基于名称和其他属性,来查询或显示进程;
-l,显示进程名字及PID;
-a,显示完整的命令行及PID;
-u,匹配用户ID的进程;
-n,仅显示最新进程的PID;
-o,仅显示最老进程的PID;
-t,显示匹配终端的进程PID;
杀死进程
Terminal
终端输入: gnome-system-monitor
就可以打开system monitor,然后找到相应进程,右击选择kill process就可以了
kill
kill
功能:向指定的进程送信号或终止进程。kill指令的用途是送一个signal给某一个process,因为大部份送的都是用来杀掉process的SIGKILL或SIGHUP ,因此称为kill
选项:-9 强行终止进程
注释:pid标示进程号,可由ps命令得到。
# 列出所有signal,来察看可代替signal号码的数字
kill -l
使用kill命令结束进程: xxx
# 根据进程号
格式:kill [-signal] pid
# eg:
kill -9 pid
kill -SIGKILL pid
kill -9 324
eg:
首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id:
然后通过 kill 3781 就可以关闭进程了.
例如: kill -9 3781
killall
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:# killall -9 NAME
# 根据进程名
killall name p_name
killall 通过程序的名字,来杀死进程
例如: killall firefox
注意: 该命令可以使用 -9 参数来强制杀死进程, killall -9 firefox
pkill
pkill通过程序的名字,直接杀死所有进程
例如: pkill firefox
特殊用法
kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。
进程号和相关函数
每个进程都由进程号来标识,其类型为pid_t(整型),进程号的范围:0~32767。进程号总是唯一的,但可以重用。当一个进程终止后,其进程号就可以再次使用。任何进程(除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各种信号,关联的进程有一个进程组号(PGID)。默认情况下,当前的进程号会当做当前的进程组号。
相关系统调用:
// 获取自身进程号
pid_t getpid(void)
// 获取父进程号
pid_t getppid(void)
// 获取进程组号
pid_t get pgid(pid_t pid)
进程优先级
内核使用【0~139】数字来表示140种内部优先级,值越低优先级越高;
【0~99】专供实时进程使用
【-20~19】Nice值映射到【100~139】
优先级,即CPU分配资源的先后顺序;决定何时运行及接受CPU多长时间;
优先级高的优先执行,配置进程优先级对多任务环境有用,可改善系统性能;
PRI
表示进程优先级,即程序被CPU执行的先后顺序;
此值越小,级别越高;
NI
表示进程优先级的修正值;
调整进程优先级,在Linux下即调整进程NI值;
NI值取值范围为-20~19;
PRI(new) = PRI(old) + Nice;
在top中更改进程NI值
进入top(按“r”) -> 输入PID -> 输入NI值;
假如进程PRI为80,每次调整都是从80开始的;
输入调整的NI值会被钳制在-20~19自己;
相关概率:
竞争性,系统进程众多,CPU资源较少,进程间具有竞争性;优先级用于更合理竞争相关资源,从而有效完成任务;
独立性,多进程运行,需独立享受各种资源,运行期间互不干扰;
并行,多进程在多个CPU下分别同时运行;
并发,多进程在单个CPU下一段时间内切换运行;
更多推荐
所有评论(0)