Linux进程管理
程序:一组指令以及参数集合,按照相应的逻辑控制计算机完成特性任务,可以开发编程
特点:静态的、封闭的
系统、用户、固件
程序====》系统调====》缓存(内存)====》CPU处理 执行任务
进程:运行的程序,动态。操作系统上的基本单位,生命周期,运行状态
特点:并发性、交互性
操作系统以进程为单位分配系统资源
每一个进程运行是独立的
具有独立的地址空间,运行状态
多个程序同时运行,每一个程序就是一个进程
程序====》运行====》进程1、进程2、进程3···
扩展:
应用(应用程序)
|
内核(内核文件、内核模块、驱动程序)
| 固件(芯片+程序)
硬件
线程:
一个进程中可有多个线程,每一个线程只能被一个进程所拥有,每一个进程可以拥有多个线程。(每一个线程可以被不同的进程运行,但运行结果需要整合到一块才能被使用)。
线程无法独立运行,线程的运行由进程决定
进程的生命周期:
等待状态----就绪状态------运行状态-----阻塞状态-----休眠状态-----死亡状态
子进程继承父进程的所有资源,子进程运行过程中父进程处于休眠状态,只有子进程运行结束,父进程才再次运行
僵尸进程:父进程产生了一个子进程,子进程又产生了自己的子进程,当该子进程运行结束,它所产生的子进程便成为僵尸进程
进程的管理工具:
pstree 进程树,查看进程间的关系
-p:显示pid
-u:显示用户
[root@localhost ~]# yum install psmisc//7上没有pstree命令,需自己下载
ps
-a:显示所有进程
-u:显示以用户为主的进程
-x:和au一起使用,显示完整信息
-l:显示更加完整的信息
[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 7725 7719 0 80 0 - 28893 do_wai pts/0 00:00:00 bash
0 R 0 8201 7725 0 80 0 - 38309 - pts/0 00:00:00 ps
标志(类型) 、状态、执行者身份、进程的ID、父进程的ID、CPU资源百分比、进程的优先权,优先值、地址、使用进程大小、当前进程的状态、终端位置、用掉CPU的时间、当前执行指令的名称
pgrep
-l:显示进程名和PID
-o:显示进程号最小的一个(父进程)
-n:显示进程号最大的一个(子进程)
kill(带进程号【PID】) killall(直接带上名字杀死进程) pkill
-9 强制杀死进程
-w 等待进程死亡
-l 列出已知信号
-u 指定用户
-0 判断进程是否存在,杀不死进程
-15 终止进程
htop:监控软件,top的增强版
vmstat:常见的监控工具
[root@localhost ~]# vmstat
procs -----------memory---------- —swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 684204 29680 159964 0 0 10 3 48 79 0 0 99 0 0
r:等待执行的任务数
b:等待的进程数
si so:当si数字显示不为零,说明内存不足,启用swap分区了。
in:每秒钟中断的进程数
cs:每秒钟上下文切换的次数
us:用户进程执行程序消耗的时间
id:空闲时间(包括等待时间)
wa:等待io时间
st:系统等待时间
lsof:
-i+端口:
:80:web
:3306:mysql
:8080:tomcat
:22:ssh
程序优先级:0 - 139
【nice值(-20)---- 19,值越小,优先级越高】
有效的时时优先级:0 - 99 — 值越小优先级越高
非有效时时优先级:100 - 139 — 值越小优先级越高【静态优先级】
查看/调整进程的nice级别:
使用top查看进程的优先级
PR:由静态优先级-100(RT:不是静态优先级)
NI:nice值,(-20)---- 19
修改NI:输入r,输入要修改的PID号,然后输入要修改的NI号,范围在(-20)---- 19
renice 【-20-19】 PPID:修改子进程(PPID)的nice值
[root@localhost ~]# renice 10 7708
htop F7(nice-) F8(nice+)
进程的状态
sleeping — 睡眠状态
stopping — 停止状态
running — 运行状态
zombie — 僵死状态
实时变化
作业
[root@localhost ~]# ping www.baidu.com >/dev/null 2>&1 &
[1] 6700
将ping的结果重定向到/dev/null中,并让它在后台运行作业,不会影响前台作业
shell可以同时运行一个前台作业和任意后台作业
egrep===grep -E “ping|sleep(ping或者sleep)”
[root@localhost ~]# jobs
(查看当前终端的后台作业)
[1]+ Running ping www.baidu.com > /dev/null 2>&1 &
[root@localhost ~]# bg %2【job编号】(让作业2在后台运行起来)
[root@localhost ~]# fg %1(将作业1调回前台运行)
[root@localhost ~]# Ctrl+z(将正在执行的作业调到后台,并暂停)
[root@localhost ~]# kill %3(终止并杀掉作业3)
[root@localhost ~]# ping 192.168.220.18(已经在后台运行,在前台输出结果;不影响前台作业执行,可以执行job和kills)