12 进程管理
## 查看kill级别
[root@localhost ~]# kill -l
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
1、ps
1.1、概念
进程组成部分:
已分配的地址空间
进程ID(PID)
程序的代码
进程状态:运行中、等待运行、睡眠等
cpu数量、内核数量
进程优先级:影响进程运行时间
优先级越高,同等代码量运行更早结束
进程管理:进程调度、中断处理、信号、进程优先级、进程切换、进程状态、进程内存等
进程的生命周期:

PID:
CentOS 5、6:PID1:init
CentOS7:PID1:systemd
僵尸进程:不执行代码、占用内存地址空间(kill不能杀死,已执行成功)
解决僵尸进程:
等待父进程响应
杀死父进程
所父进程为init或systemd,则重启解决
线程: 在同一进程中,进程中产生的一个执行单元,进程中线程并列运行
线程之间可以资源共享(如:内存、地址空间、打开文件等)
上下文切换:
(CPU切换)不能有太多上下文切换,每次切换要刷新寄存器和高速缓存区,以便释放空间给新进程
中断处理:优先级最高任务之一
由I/O产生(in、out)
硬中断:硬件产生
软中断:被用来处理可以推迟的任务,协议等
1.2、进程属性
PID:进程ID
PPID:父进程ID #通过ps -ef 查看
UID、GID
进程状态:R运行、S睡眠、Z僵尸
进程执行的优先级
进程所连接的终端名:有些无终端,脱离终端,例如一些服务
资源占用:%CPU、%MEM
1.3、ps
## 查看进程
$ ps aux
$ ps -aux (与上一个命令效果一样)
a: 显示当前终端关联的所有进程
u:基于用户的格式显示
x:显示所有进程,不以终端机来区分
## ps 命令显示完整command
$ ps -auxww
每列的意思:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
用户 进程id cpu占用比 内存占用比 终端 状态 命令启动时间 命令实际执行时间 执行的命令
VSZ:占用虚拟内存大小(kb)(申请的)
RSS:占用物理内存大小(kb)(实际使用的)
stat:Linux进程的5中基本状态:
R:正在运行,准备运行
S:睡眠中,可被某些讯号(signal)唤醒
T:停止
Z:僵尸
D:不可中断,存在于I/O(in/out)情况下
5种基本状态后还可以加:
< 进程运行在高优先级上
N 进程运行在低优先级上
L 锁定在内存中
s 控制进程
l 多线程
+ 运行在前台
stat:进程触发启动时间
time:进程实际使用CPU时间
command(CMD):进程实际指令
注意:最后一列[xxx]:
括起来的进程是内核态
没有括起来的用户态进程
注:
ctrl+c 发送sigint信号,终止一个进程
ctrl+z 发送sigstop信号,挂起一个进程,将作业放置后台(暂停)
ctrl+d EOF,输入完成或者注销
练习:
终端1:tar 压缩
[root@localhost ~]# tar -zcvf /root/etc.tar.gz /etc
终端2:ps aux #查看
[root@localhost ~]# ps aux |grep etc.tar.gz |grep -v grep
root 31720 0.0 0.1 123712 1376 pts/1 R+ 16:14 0:00 tar -zcvf /root/etc.tar.gz /etc
[root@localhost ~]# ps aux |grep etc.tar.gz |grep -v grep
root 31720 8.2 0.1 123748 1492 pts/1 S+ 16:14 0:00 tar -zcvf /root/etc.tar.gz /etc
2、ps -ef
[root@localhost ~]# ps -ef # 显示进程,能得到ppid
-e # 显示所有进程
-f # 显示完整格式输出
练习:测试CPU实际使用时间
- 终端1:创建指定bs=1M,count=3000大小的yq.txt文件
[root@localhost ~]# dd if=/dev/zero of=/root/yq.txt bs=1M count=3000
记录了3000+0 的读入
记录了3000+0 的写出
3145728000字节(3.1 GB)已复制,37.0355 秒,84.9 MB/秒
- 终端2:ps aux查看
[root@localhost ~]# ps aux |grep yq.txt |grep -v grep
root 31738 49.0 0.1 109032 1412 pts/0 R+ 16:18 0:00 dd if=/dev/zero of=/root/yq.txt bs=1M count=3000
[root@localhost ~]# ps aux |grep yq.txt |grep -v grep
root 31738 51.0 0.1 109032 1412 pts/0 D+ 16:18 0:01 dd if=/dev/zero of=/root/yq.txt bs=1M count=3000
2.1、time 命令
- 查看命令执行时间
time 命令
[root@localhost ~]# time ls
anaconda-ks.cfg etc.tar.gz ps.sh yq.txt
real 0m0.003s #实际执行时间
user 0m0.000s #用户执行时间
sys 0m0.003s #内核执行时间
2.2、free
- 查看物理内存、交换分区内存使用情况
-m #Mb单位显示
-g #Gb单位显示
-h #常见单位显示
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 972M 100M 78M 7.7M 792M 682M
Swap: 299M 0B 299M
MEM:物理内存
swap:交换分区所占内存
total used free shared buff/cache available
总空间 已用 空闲 共享 缓存/缓冲 可用大小
内存读/写
free、available大小关系受缓存/缓冲影响
free>available 缓存/缓冲占用available一部分
free<available 缓存/缓冲未占用,available总和比free大