一、什么是进程?
当我们运行一个程序,那么我们将运行的程序叫做进程
二、程序与进程之间有什么区别?
1、程序是数据和指令的集合,是一个静态的概念。比如/bin/ls、/bin/cp等二进制文件。同时程序可以长期存在系统中。
2、进程是程序运行的过程,是一个动态的概念。进程是存在生命周期的概念的,也就是说进程会随着程序的终止而销毁,不会永久存在系统中。
三、进程的生命周期?
生命周期是指一个对象的生老病死,用处很广。
四、进程运行的状态指标?
STAT基本状态 描述 STAT状态+符号 描述
R 进程运行 s 进程是控制进程,Ss进程的领导者,父进程
S 可中断睡眠 < 进程运行在高优先级上,S<优先级较高的进程
T 进程被暂停 N 进程运行在优先级上,SN优先级较低的进程
D 不可中断睡眠 + 当前进程运行在前台,R+该表示进程在前台运行
Z 僵尸进程 I 进程是多线程的,SI表示进程是以线程方式运行
五、如何监控进程的状态、静态ps、动态top?
#使用 ps aux查看当前的进程状态(静态)
状态 描述
USER 启动进程的用户
PID 进程运行的ID号
%CPU 进程占用CPU百分比
%MEM 进程占用内存百分比
VSZ 进程占用虚拟内存大小(单位Kb)
RSS 进程占用物理内存实际大小(单位kb)
TTY 进程是由哪个终端运行启动的tty1、pts/0等? 表示内核程序与终端无关
STAT 进程运行过程中的状态 man ps (/STATE)
START 进程的启动时间
TIME 进程占用CPU的总时间(为0表示还没超过秒)
COMMAND 程序的运行指令,[方括号]属于内核态的进程。没有[ ]的是用户态进程。
#使用top命令查看当前的进程状态(动态)
任务 含义
Tasks:129 total 当前进程的总数
1 running 正在运行的进程数
128 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zimbie 僵尸进程数
%Cpu(s):0.7 us 系统用户进程使用CPU百分比
0.7 sy 内核中的进程占用CPU百分比,通常内核是用于硬件进行交互
98.7 id 空闲CPU的百分比
0,0 wa CPU等待IO完成的时间
0.0 hi 硬中断,占的CPU百分比
0.0 si 软中断,占的CPU百分比
0.0 st 比如虚拟机占用物理CPU的时间
#top 常见指令
字母 含义
h 查看帮出
1 数字1,显示所有CPU核心的负载
z 以高亮显示数据
b 高亮显示处于R状态的进程
M 按内存使用百分比排序输出
p 按CPU使用百分比排序输出
q 退出top
六、进程中的iowait 硬中断、软中断?
Linux 中的中断处理程序分为上半部和下半部;
上半部对应硬件中断,用来快速处理中断
下半部对应软中断,用来异步处理上半部未完成的工作
Linux 中的软中断包括网络收发、定时、调度、等各种类型,可以通过查看 /proc/softirqs 来观察软中断的运行情况
七、如何管理进程kill、killall、pkill?
#当程序运行为进程后,如果希望停止进程,我们可以使用Linux的kill命令对进程发送关闭信号,除了kill、还有killall、pkill
1、使用kill -l列出当前系统所支持的信号
虽然linux支持信号很多,但是我们仅列出最为常用的三个信号
数字编号 信号含义 信号翻译
1 SIGHUP 通常用来重新加载配置文件
9 SIGKILL 强制杀死进程
15 SIGTERM 终止进程,默认kill使用该信号
#1、给 vsftpd 进程发送信号 1,15
#2、发送重截信号,例如 vsftpd 的配置文件发生改变,希望重新加载
[root@localhost ~]# kill -1 9160
#3、发送停止信号,当然vsfpd 服务有停止的脚本 systemctl stop vsftpd
[root@localhost ~]# kill 9160
#4、发送强制停止信号,当无法停止服务时,可强制终止信号
[root@localhost ~]# kill -9 9160
2、Linux系统中的killall、pkill命令用于杀死指定名字的进程
#1、通过服务器名称杀掉进程
[root@localhost ~]# pkill nginx
[root@localhost ~]# killall nginx
#2、使用pkill踢出从远程登录到本机的用户,终止pts/0上的所有进程,并且bash也结束(用户被强制退出)
[root@localhost ~]# pkill -9 -t pts/0
八、后台进程如何管理 jobs bg fg screen?
1.jobs、bg、fg的使用(不太重要,了解即可)
[root@localhost ~]# sleep 3000 & //运行程序(时),让其在后台执行
[root@localhost ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台
[root@localhost ~]# ps aux | grep sleep
[root@localhost ~]# jobs //查看后台作业
[root@localhost ~]# bg %2 //让作业2在后台运行
[root@localhost ~]# g %1 //让作业1调回到前台
[root@localhost ~]# kill %1 //kill 1,终止 pid 为1 的进程
[root@localhost ~]# (while:; do date; sleep 2; done)& //进程在后台运行,但输出依然在当前终端
[root@localhost ~]# (while:; do date; sleep 2; done)& >//dev/null &
2.screen的使用(重要,生产必用)
#1、安装
[root@localhost ~]# yum install screen -y
#2、开启一个screen窗口,指定名称
[root@localhost ~]# screen -s wget_mysql
#3、在screen窗口中执行任务即可
#4、平滑的退出screen,但不会终止screen中的任务 #如果使用exit,才算真的关闭screen窗口
ctrl+a+d
#5、查看当前正在运行的screen有哪些
[root@localhost ~]# screen -list
#6、进入正在运行的screen
[root@localhost ~]# screen -r wget_mysql
[root@localhost ~]# screen -r 22058
九、进程优先级是什么?nice、renice?服务器假死?
优先级指的是优先享受资源,比如排队买票时,军人优先,老人优先等等
1、使用top或ps命令查看进程的优先级
#1.使用top可以查看nice优先级 NI: 实际nice级别,默认是0。 PR: 显示nice值,-20映射到0,+19映射到39
#2.使用ps查看进程优先级
[root@localhost ~]# ps axo command,nice |grep sshd|grep -v grep
2、nice指定程序的优先级 语法格式 nice -n 优先级数字 进程名称
#1.开启vim并且指定程序优先级为-5
[root@localhost ~]# nice -n -5 vim &
3、enice命令修改一个正在运行的进程优先级。语法格式 renice -n 优先级数字 进程pid
#1.查看sshd进程当前的优先级状态
[root@locolhost ~]# ps axo pid,command,nice | grep 折叠 shd
#2.调整sshd主进程的优先级
[root@localhost ~]# renice -n 20 98002
#3.调整之后记得退出终端
[root@localhost ~]# ps axo pid,command,nice | grep 折叠 shd
[root@localhost ~]# exit
#4.当再次登录sshd服务,会由主进程fork子进程(那么子进程会继承主进程的优先级)
[root@localhost ~]# ps axo pid,command,nice | grep 折叠 shd
#服务器假死
假死,就是能ping通,但是ssh不上去,任何其他操作也没反应
#建议使用nice将sshd的进程优先级调高。这样当系统内存吃紧,还能勉强登陆sshd,进入调试,然后分析故障
十、SATA状态的S、Ss、S<、S、S+、R、R+、D、T、Z等等,都是什么意思?
SATA基本状态 描述 STAT状态+符号 描述
R 进程运行 s 进程是控制进程,Ss进程的领导者,父进程
S 可中断睡眠 < 进程运行在高优先级上,S<优先级较高的进程
T 进程被暂停 N 进程运行在优先级上,SN优先级较低的进程
D 不可中断睡眠 + 当前进程运行在前台,R+表示该进程在前台运行
Z 僵尸进程 I 进程是多线程的,SI表示进程是以线程方式运行