进程管理
程序:
是一组指令及参数的集合,按照既定的逻辑控制计算机运行用来完成特定任务
进程:
则是运行着的程序,是操作系统执行的基本单位,是程序运行的过程, 动态,有生命周期及运行状态。
程序和进程的区别
程序 | 进程 |
---|---|
程序是静态的,它只是一组指令的集合,不具有任何的运行意义 | 而进程是程序运行的动态过程。 |
进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程。 | 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程。 |
进程还具有并发性和交往性 | 而程序却是封闭的 进程和线程的区别。 |
进程和线程的区别
- 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
- 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
linux进程管理工具
Linux进程管理工具:
pstree,ps、pgrep, pkill、uptime、top、htop、vmstat、lsof。
pstree
- pstree:用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁
A: 各进程树之间的连接以ASCII码字符来连接
-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-p:同时列出每个进程的PID
-u: 同时列出每个进程的所属账号名称:
pgrep
- pgrep:经常要查看进程的信息,包括进程的是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。
pgrep通过匹配其程序名,找到匹配的进程
-l 同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个
- Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀
死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而
killall把这两个过程合二为一,是一个很好用的命令。
kill命令
kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。
常用的7种信号
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:
HUP | 1 | 终端断线 |
---|---|---|
INT | 2 | 中断(同 Ctrl + C) |
QUIT | 3 | 退出(同 Ctrl + \) |
TERM | 15 | 终止 |
KILL | 15 | 强制终止 |
CONT | 18 | 继续(与STOP相反, fg/bg命令) |
STOP | 19 | 暂停(同 Ctrl + Z |
lsof命令
# lsof
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
(1)DIR:表示目录
(2)CHR:表示字符类型
(3)BLK:块设备类型
(4)UNIX: UNIX 域套接字
(5)FIFO:先进先出 (FIFO) 队列
(6)IPv4:网际协议 (IP) 套接字
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
语法格式
lsof [options] filename
lsof abc.txt 显示开启文件abc.txt的进程
lsof -c abc 显示出以字母 abc 开头进程现在打开的文件
lsof -p 1234 列出进程号为1234的进程所打开的文件
lsof -g gname/gid 显示归属gname或gid的进程情况
lsof -u uname/uid 显示归属uname或uid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -i 用以显示符合条件的进程情况
前台进程和后台进程
前台进程:
在 shell 提示处理打入命令后,创建一个子进程,运行命令, Shell 等待命令退出,然后返回到对用户给出提示符。这条命令与 Shell 异步运行,即在前台运行,用户在它完成之前不能执行别一个命令 。
后台进程:
在 Shell 提示处打入命令,若后随一个 &, Shell 创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与 Shell 同步运行,即在后台运行。“后台进程必须是非交互式的” 。
进程优先级
nice 值越高: 表示优先级越低
nice 值越低: 表示优先级越高
查看进程的nice级别
NI: 实际nice级别
PR: 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
使用ps查看nice级别
# ps axo pid,command,nice --sort=-nice
1、使用top更改nice级别
r 调整进程的优先级(Nice Level) (-20高) ---0--- (19低)
2、使用shell更改nice级别
# sleep 7000 &
[3] 10089
[root@nebulalinux03 ~]# renice -20 10089
作业控制
一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成,Shell可以同时运行一个前台作业和任意多个后台作业,这称为作业控制(Job Control)。
# sleep 3000 & //运行程序(时),让其在后台执行
# sleep 4000 //Ctr+Z,将前台的程序挂起(暂停)到后台
# ps aux |grep sleep //查看被挂起的进程( jobs )
# jobs //查看后台作业
恢复到前台继续运行( fg )
恢复到后台继续运行( bg)
# bg %2 //让作业2在后台运行
# fg %1 //将作业1调回到前台
# kill %1 //kill 1,终止PID为1的进程