- 对进程及其属性的介绍
ps
进程监视命令top
命令即时跟踪进程lsof
命令查看占用文件进程kill
命令向进程发送信号- /PROC文件系统
如要下载笔记和代码请到我的github。上手
- 下列是一个自动创建进程的badpro程序,会自动打开程序并且创建目录和文件。
1
2
3
4
5
6
7
8
9#! /bin/bash
while echo "I'm making files!!"
do
mkdir adir
cd adir
touch afile
sleep 2s
done
1 | $ chmod +x badpro |
ps
:查看程序的PID号(PID号用于唯一表示一个进程)。ps aux | grep badpro
(是将前一个命令的输出作为后一个命令的输入)。1
$ kill PID
进程
PID
:进程的ID号;- Linux自己使用PID确定进程,也要求用户在管理进程时提供相应的PID号;
- 几乎所有进程管理工具都使用PID而不是进程名。
PPID
:父进程的PID;- Linux中,所有的进程都必须由另一个进程创建——除了在系统引导时,直接由内核主动创建并安装的几个进程。当一个进程被创建时,创建它的那个进程被称为父进程,而这个进程就叫做子进程。子进程应该是其父进程的克隆体。
UID
:真实用户ID;- 只有进程的创建者和root用户才有权利对该进程进行操作,于是记录一个进程的创建者(也就是属主)就显得非常必要,进程的UID就是其创建者的用户ID号,用于标识进程的属主。
EUID
:有效的用户ID
-Linux还为进程保存一个”有效用户ID号”,被称作EUID,用来确定进程对某些资源和文件的访问权限。绝大部分情况下,进程的UID和EUID是一致的——除了著名的SETUID
程序。- 允许用户修改密码的命令
passwd
命令就是一个典型的SETUID
程序,其UID是当前执行这个命令的用户ID,而EUID是root用户的ID(也就是0)。 - GID和EGID:真实和有效的组ID;
- EGID可能在确定访问权限方面还发挥了一定作用
- 谦让度和优先级;
ps
是最常用的监视进程的命令。ps aux
命令用于现实当前系统上运行的所有进程的信息。其中部分行代表的信息是
字段 | 含义 |
---|---|
USER | 进程创建者的用户名 |
PID | 进程的ID号 |
%CPU | 进程占用CPU的百分比 |
%MEM | 进程占用内存的百分比 |
VSZ | 进程占用的虚拟内存大小 |
RSS | 内存中页的数量(页是管理内存的单位,在PC上通常为4K) |
TTY | 进程所在终端的ID号 |
STAT | 进程状态,常用字母代表含义如下:R 正在运行/可运行 D 睡眠中(不可被唤醒,通常是在等待I/O设备)S 睡眠中(可以被唤醒) T 停止(由于受到信号或被跟踪)Z 僵进程(已经结束而没有释放系统资源的进程)———— 常用的附加标志有: < 进程拥有比普通优先级高的优先级N 进程拥有比普通优先级低的优先级L 有些页面被锁在内存中s 会话的先导进程 |
START | 进程启动时间 |
TIME | 进程已经占用的CPU时间 |
COMMAND | 命令和参数 |
ps
的另一组选项lax
可以提供PPID和谦让度(NI)。- 不带任何参数的
lsof
命令会列出当前系统中所有打开文件的进程信息。 - 用文件名作为参数,可以查看占用该文件的进程。
向进程发送信号:kill
kill
命令用来向进程发送一个信号,这个信号是什么由用户指定。默认发送的是TERM
信号,这个信号表示请求终止某项操作。 标准用法是:
1
kill [-signal] pid
信号及其编号用
kill -l
查看(INT为’ctrl+c’)。
信号编号 | 信号名 | 描 述 | 默认情况下执行的操作 |
---|---|---|---|
0 | EXIT | 程序退出时收到该信号 | 终止 |
1 | HUP | 挂起 | 终止 |
2 | INT | 中断 | 终止 |
3 | QUIT | 退出 | 终止 |
9 | KILL | 杀死 | 终止 |
11 | SEGV | 段错误 | 终止 |
15 | TERM | 软件终止 | 终止 |
hints:信号名前缀SIG
是可以省略,即 kill -SIGTERM pid
和kill -TERM pid
都是一样的。
- 注意:
kill
命令不一定可以终止一个进程,既然kill
命令向进程发送一个信号,这个信号就能被程序捕捉,程序可以“封锁”或者“忽略”捕捉到的信号。只有在信号没有被程序捕捉的情况下,系统才会执行默认操作。比如可以加入trap "" TERM
来忽略TERM信号。 KILL
信号永远不能被程序所捕捉,KILL
信号可以在内核级别杀死进程。kill -SIGTERM pid
或kill -TERM pid
或kill -9 pid
。
也有KILL
信号都不能影响的进程,常常是由一些退化的I/O(输入/输出)虚假锁定造成的。此时,重新启动系统是唯一的解决办法。调整进程的谦让度:nice和renice
nice
命令可以在启动程序时设置其谦让度,调整的是“相对”谦让度值。- 用不带参数的
nice
的命令查看默认谦让度值,一般是0。
- 用不带参数的
renice
命令在程序运行时调整其谦让度值,调整的是“绝对”谦让度值。- 高谦让度表示低优先级,低谦让度(尤其是负数)的程序会占用更多的CPU时间,拥有更高的优先级。
- 新进程一般将从其父进程那里继承谦让度。为保证低优先级的进程不会派生出高优先级的进程,允许进程的属主提高其谦让度(降低优先级),但不能降低谦让度。但是root用户可以任意设置进程的优先级。
/PROC文件系统
/proc
目录下存放了内核有关系统状态的各种有意义的信息。