进程+ps+pstree+lsof+top+kill

进程

  • 已分配内存的地址空间;
  • 安全属性,包括所有权凭据和特权;
  • 程序代码的一个或多个执行线程;
  • 进程状态
  在操作系统的定义中,程序段,数据段和PCB3部分构成了进程

进程与程序的关系

程序: 二进制文件,静态 /bin/date,/usr/sbin/sshd
进程: 是程序运行的过程, 动态,有生命周期及运行状态。

ps

a: 显示跟当前终端关联的所有进程
u: 基于用户的格式显示(U: 显示某用户ID所有的进程)
x: 显示所有进程,不以终端机来区分
eg:查看本地的一些进程
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
 COMMAND
root          1  0.1  0.3 194680  7924 ?        Ss   12:40   0:55
 /usr/lib/systemd/systemd --switched-root --system --deserialize 
22
root          2  0.0  0.0      0     0 ?        S    12:40   0:00
 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    12:40   0:00
 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   12:40   0:00
USER: 启动这些进程的用户
PID: 进程的ID
%CPU 进程占用的CPU百分比; 
%MEM 占用内存的百分比; 
VSZ:进程占用的虚拟内存大小(单位:KB) 
RSS:进程占用的物理内存大小(单位:KB) 
STAT:该程序目前的状态,Linux进程有5种基本状态:
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
D  不可中断状态.  
它们含意如下::
<: 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际指令
ctrl+c:发送SIGINT信号,终止一个进程
ctrl+z:挂起一个进程,将其放到后台,并且暂停
ctrl+d:表示一个特殊的二进制,EOF

D:不可中断的例子。

分别在2个不同的终端上打开,
第一个终端:
[root@break test]# tar -zcvf etc.tar.gz /etc
第二个终端:
[root@break ~]# ps -aux | grep tar
du         3053  0.0  0.3 1285444 7456 ?        Sl   13:58   0:11 /usr/bin/pulseaudio --start --log-target=syslog
root      16204  0.0  0.0 112724   984 pts/2    S+   21:59   0:00 grep --color=auto tar
[root@break ~]# ps -aux | grep tar
du         3053  0.0  0.3 1285444 7456 ?        Sl   13:58   0:11 /usr/bin/pulseaudio --start --log-target=syslog
root      16205 19.0  0.0 123844  1440 pts/1    D+   21:59   0:00 tar -zcvf etc.tar.gz /etc
root      16208  0.0  0.0 112724   984 pts/2    S+   21:59   0:00 grep --color=auto tar
也就是说,在压缩的过程中,处于不可中断的过程。

ps -ef

 -e  显示所有进程
 -f  显示完整格式输出
 [root@break ~]# ps -ef | more
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 12:40 ?        00:00:55 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 12:40 ?        00:00:00 [kthreadd]
root          3      2  0 12:40 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 12:40 ?        00:00:00 [kworker/0:0H]
内容:
UID: 启动这些进程的用户
PID: 进程的ID
PPID: 父进程的进程号
C: 进程生命周期中的CPU利用率
STIME: 进程启动时的系统时间
TTY: 表明进程在哪个终端设备上运行。如果显示  ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
TIME: 运行进程一共累计占用的CPU时间
CMD: 启动的程序名称

uptime——用来查看系统的负载

[root@break ~]# uptime
 08:49:18 up  9:30,  4 users,  load average: 0.00, 0.02, 0.05
 时间:08:49:18
 up 9:30 :系统运行的时间
 使用者个数:4 users
 load average : 系统的负载情况,1,5,15,负载,也就是任务队列的平均长度。

找出服务器的负载情况最高的:
服务器1: load average: 0.15, 0.08, 0.01 1核
服务器2: load average: 4.15, 6.08, 6.01 1核
服务器3: load average: 10.15, 10.08, 10.01 4核
答案:服务器2
如果服务器的CPU为1核心,则load average中的数字 >=3 负载过高,如果服务器的CPU为4核心,则load average中的数字 >=12 负载过高。
经验:单核心,1分钟的系统平均负载不要超过3,就可以,这是个经验值。

top

[root@break ~]# top
top - 08:56:50 up  9:38,  4 users,  load average: 0.00, 0.01, 0.05
Tasks: 236 total,   2 running, 232 sleeping,   2 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2030172 total,   219532 free,   982464 used,   828176 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   776432 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                         
   755 root      20   0   21668   1284    972 S   0.3  0.1   0:12.12 irqbalance  
   第一行:
   当前时间:08:56:50
   运行时间:9:38
   用户数量:4 users
   负载情况:load average
 	第二行:
 	进程总数:tasks:236 total
 	运行中的进程:2 running
 	睡眠的进程数:232 sleeping
 	停止的进程数:2 stopped
 	僵尸进程:0 zombie
 	第三行:
 	系统用户占据cpu的百分比:0.0% us
 	内核进程占据cpu百分比:0.0 sy
 	用户进程通过改变优先级的进程占用CPU百分比:0.0 ni
 	空闲cpu占百分比:100.0 id
 	等待IO:0.0 wa
 	硬中断:0.0 hi
 	软中断:0.0 si
 	虚拟内存占用cpu: 0.0 st
 	第四行:
 	物理内存总量:2030172 total
 	空闲的内存: 219532 free,  
 	使用的总量:  982464 used
 	缓冲的总量:828176 buff/cache
 	第五行与第四行类似,描述的是swap的情况。
 	第六行:
 	PID:进程ID
 	USER:进程所有者的用户名
 	PR:优先级,内核调整
 	NI:进程优先级,可以用户调整
 	VIRT:虚拟内存
 	RES:物理内存
 	SHR:共享内存
 	S:进程状态
 	%CPU:上次更新到现在CPU时间占用百分比
 	%MEM:物理内存百分比
 	TIME+:cpu时间总计
 	COMMAND:命令/命令行	
top的简单使用:
空格刷新
1显示各个cpu
q退出
P:CPU排序
M:内存排序
T:时间排序
u:查看某个人的信息
p:查看某个进程的状态

查找一个进程的详细信息

[root@break ~]# ps -aux | grep vim
root      16050  0.0  0.2 151820  5348 pts/1    T    08:30   0:00 vim a.txt
root      16080  0.0  0.2 151820  5352 pts/1    T    08:32   0:00 vim b.txt
root      16915  0.0  0.0 112720   980 pts/2    S+   09:29   0:00 grep --color=auto vim
[root@break ~]# top -p 16050
top - 09:29:26 up 10:10,  4 users,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   0 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2030172 total,   219868 free,   982472 used,   827832 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   776852 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                         
 16050 root      20   0  151820   5348   2728 T   0.0  0.3   0:00.04 vim           

lsof

lsof命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
第一个终端:
[root@break test]# ps -aux | grep a.txt
root      16050  0.0  0.2 151820  5348 pts/1    T    08:30   0:00 vim a.txt
root      17741  0.2  0.2 151868  5448 pts/2    S+   09:39   0:00 vim a.txt
root      17753  0.0  0.0 112720   996 pts/1    S+   09:39   0:00 grep --color=auto a.txt
第二个终端:
[root@break test]# lsof -p 16050
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
vim     16050 root  cwd    DIR  253,0      4096 16797761 /root
vim     16050 root  rtd    DIR  253,0       224       64 /
vim     16050 root  txt    REG  253,0   2294256 26475453 /usr/bin/vim
[root@break test]# ps -aux | grep a.txt
root      16050  0.0  0.2 151820  5348 pts/1    T    08:30   0:00 vim a.txt
root      17741  0.2  0.2 151868  5448 pts/2    S+   09:39   0:00 vim a.txt
root      17753  0.0  0.0 112720   996 pts/1    S+   09:39   0:00 grep --color=auto a.txt
[root@break test]# lsof -p 16050
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
vim     16050 root  cwd    DIR  253,0      4096 16797761 /root
vim     16050 root  rtd    DIR  253,0       224       64 /
vim     16050 root  txt    REG  253,0   2294256 26475453 /usr/bin/vim

前台与后台

前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随着消失
后台进程: 也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要与终端交互;

&:将一个进程放到后台
jobs:查看后台进程
bg:将进程放到前台
fg:将进程放到后台
kill killall pkill 都可以杀死进程
kill -l:列出所有的信号,以下是一部分的信号:
1)		SIGHUP     重新加载配置
2)	 	SIGINT      键盘中断  crtl+c
3)    	SIGQUIT     退出
9)      SIGKILL      强制终止
15)     SIGTERM    终止(正常结束),缺省信号
18) 	SIGCONT    继续
19)   	SIGSTOP     停止
20)    SIGTSTP     暂停 crtl+z

将一个进程从后台放回前台

[root@break ~]# vim a.txt,使用ctrl+z来进行进程的停止
[1]+  已停止               vim a.txt
[root@break ~]# jobs
[1]+  已停止               vim a.txt
[1]+  已停止               vim a.txt
[root@break ~]# fg 1

杀死一个进程

[root@break ~]# ps -aux | grep a.txt
root      16050  0.0  0.2 151820  5348 pts/1    T    08:30   0:00 vim a.txt
root      17898  0.0  0.0 112720   992 pts/2    S+   09:51   0:00 grep --color=auto a.txt
[root@break ~]# kill -9 16050
[root@break ~]# ps -aux | grep a.txt
root      17901  0.0  0.0 112720   996 pts/2    S+   09:52   0:00 grep --color=auto a.txt

nice

优先级取值范围为(-20,19),越小优先级越高, 默认优先级是0
命令1:nice 指定程序的运行优先级
格式:nice n command
命令2:renice 改变程序的运行优先级
格式:renice -n pid

#将vim的优先级改变为5,并且查看,然后使用renice修改
[root@break test]# vim a.txt
[root@break test]# nice -n 5 vim 
[root@break test]# nice -n 5 vim a.txt

[1]+  已停止               nice -n 5 vim a.txt
[root@break test]# ps -aux | grep vim 
root      18129  0.1  0.2 151868  5448 pts/1    TN   10:03   0:00 vim a.txt
root      18139  0.0  0.0 112720   984 pts/1    S+   10:03   0:00 grep --color=auto vim
[root@break test]# top -p 18129
top - 10:03:52 up 10:45,  4 users,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   0 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2030172 total,   188028 free,   993444 used,   848700 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   755916 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                         
 18129 root      25   5  151868   5448   2780 T   0.0  0.3   0:00.02 vim                                                             
[root@break test]# renice -n 100 18129
18129 (进程 ID) 旧优先级为 5,新优先级为 19
                                                       

你可能感兴趣的:(linux)