进程
概念; 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程 ,可以理解为正在运行的程序
linux内核维护着一张记录系统中运行的所有进程的各种信息,会自动完成对进程的控制和调度,内核中一些重要的进程信息如下:
- 进程的内存地址
- 进程当前的状态
- 进程正在使用的资源
- 进程的优先级
- 进程的属主
进程的一些属性
进程的ID号:PID,标志着这个进程
-
父进程的ID号:PPID,在linux系统中,所有的进程都必须由另一个进程创建,除了系统引导时,由内核自主创建并安装的那几个进程,创建进程的那个进程被成为父进程。
注意:linux并没有提供一种系统调用来让应用程序“创建”一个进程,而是通过克隆自己来产生新进程
-
真实和有效的用户ID:
- UID:只有进程的创建者和root用户才有权力对该进程进行操作,于是记录了一个进程的属主,进程的UID就是其创建者的用户ID
- EUID:linux还为进程保存了一个“有效用户ID号”,这个EUID号用来确定进程对某些资源和文件的访问权限,eg:setuid程序
-
真实和有效的组ID:
- GID:创建者所属组的ID号
- EGID:与EUIDl类似,可以通过setgid程序来设置
谦让度与优先级
监视进程
-
ps命令
ps aux ##显示当前系统上运行的所有进程的信息 ps lax ##不会显示进程属主的用户名(因此运行速度更快),但是可以提供父进程ID和谦让度(NI)
-
说明:
USER:进程创建者的用户名
PID:进程的ID号
%CPU:进程占用的cpu百分比
%MEN:进程占用的内存百分比
VSZ:进程占用的虚拟内存大小
RSS:内存中页的数量(页是管理内存的大小,在PC上通常是4K)
TTY:进程所在终端的ID号
-
STAT:
-
进程状态
- R:正在运行
- S:睡眠中(可以被唤醒)
- Z:僵进程(已经结束而没有释放系统资源的进程)
- D:睡眠中(不可被唤醒,通常是在等待I/O设备)
- T:停止(由于收到信号或被跟踪)
-
常用的附加标志:
- <:进程拥有比普通优先级高的优先级
- N:进程拥有比普通优先级低的优先级
- L:有些页面被锁在内存中
- s:会话的先导进程
-
START:进程启动的时间
TIME:进程已经占用CPU的时间
COMMAND:命令和参数
即时跟踪进程信息
- top命令:即使跟踪当前系统中进程的情况,默认情况下每10s更新一次,使用命令q退出这个监视程序
查看占用文件的进程:lsof
lsof 文件名
不带参数的lsof会列出所有打开文件的进程的信息
向进程发送信号:kill
kill命令总是用来杀死一个进程,但事实上,从本质上讲,kill命令只是用来向进程发送一个信号,至于这个信号是什么,则是由用户指定的
kill [-signal] pid ##标准语法
kill -l ##显示所有信号及其编号
根据硬件体系结构不同,列表会有所不同,信号名的前缀SIG可以省略
- 常用信号
信号编号 | 信号名 | 描述 | 默认情况下执行的操作 |
---|---|---|---|
0 | EXIT | 程序退出时收到该信号 | 终止 |
1 | HUP | 挂起 | 终止 |
2 | INT | 中断 | 终止 |
3 | QUIT | 退出 | 终止 |
9 | KILL | 杀死 | 终止 |
11 | SEGV | 段错误 | 终止 |
15 | TERM | 软件终止 | 终止 |
注意:killl命令不一定可以终止一个程序,kill命令向程序发送的一个信号,这个信号可以被程序捕捉,程序可以封锁或者干脆忽略,所以只有在信号没有被程序捕捉的情况下,系统才会执行默认操作。例如
#! /bin/bash
trap "" TEEM
while echo "i am making files"
do
mk adir
cd adir
touch afile
sleep 2s
done
上面这个文件,一旦被执行,使用kill -TERM 将无法终止,trap “” TERM将会忽略TERM信号,但有一个信号永远都不能被程序所捕捉,就是KILL信号,KILL可以在内核级别杀死一个而进程,所以,可以使用
kill -9 pid
kill -KILL pid
来杀死进程,然而也有一些退化的I/O虚假锁造成的进程,kill也无法影响他们,只能重启系统
-
trap知识补充: 用于指定在接收到信号后将要采取的动作
trap command signal ##signal 为接收到的信息,command为接收到信号后执行的操作:三种形式 1 trap "commands" signal-list ## 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令。 2 trap signal-list ##trap不指定任何命令,接受信号的默认操作,默认操作是结束进程的运行 3 trap " " signal-list ## trap命令指定一个空命令串,允许忽视信号,我们用到的就是这一种
调整进程的谦让度
-
nice命令:在启动程序时设置其谦让度
nice -n 2 bc## -n参数用户增加程序的谦让度值 bc为指定程序 nice bc ##不带参数的nice会将程序的谦让度增量设置为10 nice ##不带任何参数的nice可以查看默认的谦让度值
-
renice命令:在程序运行时调整其谦让度值
renice +12 -p 3244 ## -p指定进程号
新进程会从其父进程那里继承谦让度,进程的属主可以提高其谦让度,但不能降低其谦让度,保证低优先级的进程不会派生出高优先级的子进程,但是root用户可以任意设置进程的优先级
/proc文件系统
一个非常特殊的文件系统,存放着内核有关系统状态的各种有意义的信息。在系统运行时,内核会随时向这个目录写入数据,ps和top命令就是从这个地方读取数据的,这是操作系统向用户提供的一条通往内核的通道,用户甚至可以通过向/proc目录下的文件写入数据来 修改操作系统参数。