Linux系统的进程管理
1、进程的描述
什么是进程?
进程是已启动的可执行程序的运行实例;
包括以下部分:
- 已分配的内存的地址空间
- 安全属性,包括所有权凭证和特权;
- 程序代码的一个或者多个执行的线程;
- 有进程状态的说法;
程序:二进制文件,静态的–》/bin/sh
**进程:**是程序运行的过程,动态、有生命周期以及运行状态的;
进程的周期:
- process:进程
- parent process:父进程
- child process:子进程
- zombie:僵尸进程
- fork:分叉
- wait:等待
关于进程的描述
父进程复制自己的地址空间(fork )创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。
Centos7进程PID为1的进程是:init
Centos7以上的PID是1的进程是:systemd
僵尸进程:一个进程使用fork创建的子进程,如果子进程退出,而父进程并没有调用wait或者waitpid获取子进程的装填信息,那么,子进程的进程描述仍然保存在系统中,这种进程就是僵尸进程;
简单地理解僵尸进程:父进程退出了,子进程没有退出,缺乏管理者就变成了僵尸进程;
进程的属性:
进程ID:是系统中唯一的值,用来区分进程的;
父进程:PPID
启动进程的用户ID(UID)和所属的组(GID)
进程状态:
进程的优先级
进程所连接的种短命
进程资源占用:进程占用的内存、CPU占有容量等等;
2、进程相关命令
ps命令
作用:查看进程的工具
语法:ps+【选项】
选项:
- -a:显示当前终端关联的所有进程
- -u:基于用户的格式显示;
- -x:显示所有的进程
常用的进程组合
[root@master30 ~]# ps -aux | more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.3 125376 3900 ? Ss 22:18 0:01 /usr/lib/systemd/systemd --s
witched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 22:18 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 22:18 0:00 [ksoftirqd/0]
............
#小的知识点:
最后一列[xxxx] 使用方括号括起来的进程是内核态的进程。 没有括起来的是用户态进程。
#命令输出的信息比较重要
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:该程序的实际指令
#在一个终端上输入
[root@master30 data]# vim a.txt
#然后在另外一个终端上输入
[root@master30 ~]# ps -aux | grep vim
root 1345 0.8 0.5 149548 5244 pts/0 S+ 22:40 0:00 vim a.txt
root 1398 0.0 0.0 112676 980 pts/1 R+ 22:41 0:00 grep --color=auto vim
#S+:代表的就是前台休眠的进程
#然后输入ctrl+z:切换至后台运行:
[root@master30 ~]# ps -aux | grep vim
root 1345 0.2 0.5 149548 5244 pts/0 T 22:40 0:00 vim a.txt
root 1400 0.0 0.0 112676 984 pts/1 R+ 22:41 0:00 grep --color=auto vim
#这里就是停止了的进程;
[root@master30 data]
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 31344 ep_pol 22:18 ? 00:00:01 /usr/lib/systemd/
systemd --switched-root --system --deserialize 21
1 S root 2 0 0 80 0 - 0 kthrea 22:18 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 22:18 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker 22:18 ? 00:00:00 [kworker/0:0H]
..............
UID: 启动这些进程的用户
PID: 进程的ID
PPID: 父进程的进程号
C: 进程生命周期中的CPU利用率
STIME: 进程启动时的系统时间
TTY: 表明进程在哪个终端设备上运行。如果显示 ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
TIME: 运行进程一共累计占用的CPU时间
CMD: 启动的程序名称
uptime命令
作用:查看系统负载
语法:uptime
注意:命令不重要重要的是输出信息
[root@master30 data]
22:55:44 up 37 min, 2 users, load average: 0.00, 0.01, 0.05
22:55:44
up 37 min,
2 users,
load average: 0.00, 0.01, 0.05
如果服务器的CPU为1核心,则load average中的数字 >=3 负载过高,如果服务器的CPU为4核心,则load average中的数字 >=12 负载过高。
经验:单核心,1分钟的系统平均负载不要超过3,就可以,这是个经验值。
top命令
作用:动态查看系统负载信息
语法:top
top命令是交互式的命令;
top的交换式命令
- 默认是3s刷新一次,按s修改刷新时间
- 按空格,立即刷新
- q:退出
- P:按cpu排序
- M:按照内存排序
- T:按照时间排序
- p:进程ip,查看某个进程状态
top命令的信息很重要
[root@master30 ~]
top - 21:25:12 up 8 min, 1 user, load average: 0.05, 0.07, 0.05
Tasks: 110 total, 1 running, 109 sleeping, 0 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 : 999696 total, 720376 free, 119208 used, 160112 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 712428 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
248 root 20 0 0 0 0 S 0.3 0.0 0:00.02 kworker/u256:2
282 root 20 0 0 0 0 S 0.3 0.0 0:00.08 xfsaild/sda3
1141 root 20 0 0 0 0 S 0.3 0.0 0:00.38 kworker/0:3
21:25:12: 系统单签时间
up 8 min:系统启动了的时间
1 user, :一个用户登录
load average: 0.05, 0.07, 0.05:系统在1分钟、5分钟和15分钟的平均负载值;
Tasks: 108 total, :进程总数
1 running, :正在运行的进程数
107 sleeping, :睡眠的进程数
0 stopped, :停止的进程数
0 zombie :多少个僵尸进程
%Cpu(s): 0.3 us,
0.3 sy,
0.0 ni,
99.3 id,
0.0 wa,
0.0 hi,
0.0 si,
0.0 st
KiB Mem : 999696 total,
722416 free,
117160 used,
160120 buff/cache
KiB Swap: 2097148 total,
2097148 free,
0 used.
714472 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEM
TIME+
COMMAND
top实战:找出系统中使用CPU最多的进程
- 在运行top,找出使用CPU最多的进程,按大写P,可以按照CPU使用率来排序显示
lsof命令
作用:查看进程打开的文件,打开文件的进程、进程打开的端口
语法:lsof+选项
选项:
- -i+条件:列出符合条件的进程
- -p+进程号:列出指定进程号所打开的文件
[root@master30 ~]
root 1425 1176 0 21:47 pts/0 00:00:00 vim aa.txt
root 1470 1428 0 21:47 pts/1 00:00:00 grep --color=auto vim
[root@master30 ~]
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 1425 root cwd DIR 8,3 54 51583508 /data
..................
pstree命令
作用:一树状图显示进程
语法:pstree+选项
选项
[root@master30 ~]
systemd(1)─┬─ModemManager(529)─┬─{ModemManager}(537)
│ └─{ModemManager}(546)
├─NetworkManager(548)─┬─{NetworkManager}(617)
│ └─{NetworkManager}(619)
....................
Linux前台进程切换
前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随着消失
后台进程: 也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要与终端交互;Linux的大多数服务器就是用守护进程实现的。比如,Web服务器httpd等。
ctrl+z:把执行的命令放入到后天执行
&:使用命令的末尾加上&;使得命令在后台运行
jobs:查看多少在后台运行的命令
fg:把后台运行的命令调到前台执行
kill命令
作用:关闭进程
语法:kill+选项
选项:
[root@master30 ~]
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
killall命令
作用:终止进程
语法:killall+进程名
pkill命令
作用:终止进程
语法:pkill+进程名
优先级管理
优先级取值范围:-20,19,越小优先级越高,默认优先级是0
nice+命令
renice+数字+进程pid
3、进程实战
实战场景:公司晚上需要备份数据,如果等待执行?在xshell上执行中,然后关闭了xshell的时候,同时命令也会结束;
xshell长时间连接,如果本地网络断开,都会让后台的命令同时停止;
那么就会引入一个screen命令
screen概述和安装
Screen中有会话的概念,,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
[root@master30 data]
警告:/mnt/cdrom/Packages/screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
准备中...
正在升级/安装...
1:screen-4.1.0-0.23.20120314git3c29
screen的使用方法:
[root@master30 data]
[root@master30 data]
ldsfjksdl
sjldfjsl
sdlfkjsldf
......
[detached from 1705.pts-0.master30]
[root@master30 data]
There are screens on:
1759.pts-0.master30 (Attached)
1705.pts-0.master30 (Detached)
2 Sockets in /var/run/screen/S-root.
[root@master30 data]
ldsfjksdl
sjldfjsl
sdlfkjsldf
[root@master30 data]
exit
[screen is terminating]
screen的常用参数
screen -S test -> 新建一个叫test的会话
screen -ls -> 列出当前所有的会话
screen -r test -> 回到test会话
|