这是我参与新手入门的第一篇文章~~
查看进程的命令
pidof pgrep pstree ps top
等等。
pidof
命令用于查找指定名称的进程的进程号。
root@localhost ~# pidof sshd
122323 121730 1719
这个命令无法模糊搜索,所以在使用的时候一定要知道准确的进程名字
pgrep
命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。
# pgrep -o chr -l
22019 chrome
这个命令不仅可以模糊搜索,还可以通过-o
参数找到起始进程,-l
打印名字
pstree
命令将所有行程以树状图显示。
# pstree 22019
chrome─┬─2*[cat]
├─chrome─┬─chrome
│ └─7*[{chrome}]
├─chrome───8*[{chrome}]
├─chrome-sandbox───chrome─┬─chrome─┬─7*[chrome───10*[{chrome}]]
│ │ ├─chrome───9*[{chrome}]
│ │ ├─chrome───12*[{chrome}]
│ │ ├─2*[chrome───11*[{chrome}]]
│ │ └─chrome───13*[{chrome}]
│ └─chrome-sandbox───nacl_helper
└─27*[{chrome}]
常用命令之ps -- 静态查看进程的统计信息
ps命令用来列出系统中当前运行的那些进程。
ps命令参数众多,这里只讲两种搭配用法:
1.ps aux
# a:显示终端下所有进程信息,包括其他用户的进程
# u:显示进程的拥有者
# x:显示当前用户所在终端下的进程信息,和a一起用,显示所有进程
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 165820 10644 ? Ss 08:58 0:01 /lib/systemd/systemd --switched-root --system --deserialize 33
- %CPU
%CPU = cputime/realtime*100
,这个值不可能达到100%。 cputime:进程生命周期中使用cpu的时间。 realtime:进程生命周期。 - %MEM 进程占用物理内存的百分比
- VSZ 进程占用虚拟内存的量,单位KB
- RSS 进程占用物理内存的量,单位KB
- TTY 该进程是在哪个终端机上面运作,若与终端机无关,则显示'?',另外,tty1-tty6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。 守护进程因为脱离session,所以这一栏显示'?'。
- STAT 该程序目前的状态,主要的状态有:
D 不可中断睡眠(通常是在IO操作)收到信号不唤醒和不可运行,进程必须等待直到有中断发生
R 正在运行或可运行(在运行队列排队中)
S 可中断睡眠(休眠中,受阻,在等待某个条件的形成或接受到信号)
T 已停止的,进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W 正在换页(2.6.内核之前有效)
X 死进程(未开启)
Z 僵尸进程,进程已终止,但进程描述符存在,直到父进程调用wait()系统调用后释放
< 高优先级(not nice to other users)
N 低优先级(nice to other users)
L 有页被锁定在内存(实时和定制的IO)
s 首进程
l 多线程(使用CLONE_THREAD,像NPTL的pthreads的那样)
+ 在前台进程组
- START 进程的启动时间
- TIME 累计使用cpu的时间,格式:hh:mm:ss
- COMMAND 所执行的指令
2.ps alx
# -l:长格式显示
# ps alx
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 165820 10644 - Ss ? 0:01 /lib/systemd/systemd --switched-root --system --deserialize 33
- PPID 父进程的pid
- PRI 进程的优先级。数字越大意味着优先级越低。 PRI是内核动态调整的,我们使用者也无权去干涉。
- NI
进程的NICE值,数值大,表示较少占用CPU时间。
nice值可调整的范围为-20至19。
PRI(new)=PRI(old)+nice
- WCHAN 正在等待的进程资源。
常用命令之top -- 动态查看进程
top命令用于实时显示进程的动态
# top
top - 06:10:09 up 1 day, 12:24, 1 user, load average: 0.00, 0.01, 0.05
# 系统时间 运行时长 当前1个用户登录系统 系统在1分钟、5分钟、15分钟的平均负载情况
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
# 192个进程 1个正在运行 119个休眠 0个停止的 0个僵尸进程
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3861372 total, 3276688 free, 215736 used, 368948 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3403116 avail Mem
...
top命令展示的信息特别多,这边简单讲几个我觉得重要的:
- load average
一段时间(1分钟、5分钟、15分钟)内CPU平均负载。
在top命令中按'1'可以看几个CPU分别的情况,一般
load average的值 / CPU个数 > 1
说明已经超负荷了。 - Tasks 警惕zombie僵尸进程,虽然不占用资源,但占pid。
- %Cpu(s)
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待I/O的CPU时间百分比
这里要注意wa,如果系统卡,wa高,说明I/O可能出现了拥塞。
- SHR 共享内存大小,单位kb。详细可了解shmget()函数。
- %CPU 注意这边的%CPU与ps命令中的完全不同。 top是从上次更新以来,进程占总CPU时间的百分比。 一般几秒钟一刷,可以认为是即时的。值最高为CPU核数x100%。 所以我们平时定位问题需要的是这个值。
- COMMAND 这里如果需要显示全需要加'-c'参数。
后台运行程序,查看和关闭后台运行程序
1、运行.sh文件
直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令。
(1)&命令
功能:加在一个命令的最后,可以把这个命令放在后台执行
(2)nohup命令 -- 后端运行程序
功能:将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端
2、查看当前后台运行的命令
有两个命令可以用,jobs和ps,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了。而ps命令用于查看瞬间进程的动态,可以看到别的终端运行的后台进程。
(1)jobs命令
功能:查看当前终端后台运行的任务,显示系统中的任务列表及其运行状态
jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。
-l 显示作业列表时包括进程号
-n 显示上次使用jobs后状态发生变化的作业
-p 显示作业列表时仅显示其对应的进程号
-r 仅显示运行的(running)作业
-s 仅显示暂停的(stopped)作业
3、关闭当前后台运行的命令
kill命令:结束进程
(1)通过jobs命令查看jobnum,然后执行 kill %jobnum
(2)通过ps命令查看进程号PID,然后执行 kill %PID
如果是前台进程的话,直接执行 Ctrl+c 就可以终止了
# 终止指定进程名的进程(同名进程均被终止)
killall -9 bash
# pkill 按照特定的条件结束进程
pkill -9 bash # 同killall -9 bash
# 根据进程所属的用户名终止相应进程
pkill -U zhangsan
# 根据进程所在的终端终止相应进程
pkill -t pts/1
4、前后台进程的切换与控制
(1)fg命令
功能:将后台中的命令调至前台继续运行
如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。
(2)Ctrl + z 命令
功能:将一个正在前台执行的命令放到后台,并且处于暂停状态
(3)bg命令
功能:将一个在后台暂停的命令,变成在后台继续执行
如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。