计算机的硬件资源主要有三种:CPU、内存和I/O。进程之间为了获得这些资源相互竞争,内核负责公平的分配资源,进程通过内核来创建新的进程,并且和其它的进程进行通信。
如何查看进程
使用ps
命令查看进程
可以使用ps
命令查看系统中运行的进程,每一个进程都有一个数字ID,叫做进程ID,(Process ID,简称PID)。使用ps
命令列出所有正在运行的进程:
$ ps
PID TTY STAT TIME COMMAND
1622 tty1 Ssl+ 0:03 /usr/bin/X :0 -background none ···
3528 pts/0 Ss 0:00 -bash
每行的字段代表的内容
PID:进程ID
TTY:进程所在的终端设备
STAT:进程状态,进程在内存中的状态。
TIME:进程目前为止所用的CPU时长
COMMAND:命令名
- 常用的选项:
ps x
当前用户运行的所有进程ps ax
系统当前运行的所有进程,包括其它用户的进程。ps u
显示更详细的进程信息ps w
显示命令的全名
通过top
命令实时查看当前的进程
ps命令可以显示出当前运行的进程,但是无法提供进程随时间的变化情况。top命令可以显示系统的当前状态,并且将当前系统中最活跃的进程显示在最上方。
可以使用键盘向top发送名,比较常用的键盘命令:
空格键 立即更新显示的内容
M 按照当前的内存使用量排序
T 按照CPU的累计使用量排序
P 按照当前CPU使用量排序
u 仅显示某位用户的进程
使用命令top -p <pid>
显示某一具体的进程信息
lsof命令
lsof命令可以列出打开的文件以及使用他们的进程。
lsof命令有两种基本的使用方式
-
使用
lsof
命令列出完整的结果,然后使用管道符进行过滤。 -
添加命令行选项来过滤lsof命令的输出结果。
-
使用文件名作为参数,例如:
lsof /usr
-
使用PID列出打开的文件
lspf -p <PID>
-
如何终止进程
要终止一个进程,可以使用kill
命令向其发送一个信号,请求内核向该进程发送一个信号,可以执行一下命令:
kill <pid>
信号的种类有很多(可以使用kill -l
查看所有的kill信号),默认的是TERM
,可以发送不同的信号给该进程。例如,发送STOP
信号可以让进程暂停,而不是终止:
kill -STOP <pid>
被暂停的进程会继续驻留在内存,可以使用CONT
信号继续执行该进程。
kill -CONT <pid>
也可以使用CTRL+C来终止当前运行的进程,效果和kill -INT命令一样。
终止一个进程可以直接使用-kill
信号,kill信号会强行终止该进程,不给进程清理和收尾的机会,不到万不得已不要使用该信号。也可以使用数字来代替信号名,kill -9
等同于kill -kill
。
如何进行任务的控制
可以使用CTRL+Z
发送TSTP信号来停止进程,该进程会在后台处于暂停状态。
可以使用jobs
命令查看当前暂停了那些进程,可以使用fg
将进程置于前台终端,或者bg
后台继续运行该进程。
后台进程
在shell上运行命令时,命令提示符会短暂消失,当命令结束时又会重新显示,可以使用&
符号将该进程设置为后台运行,这样命令提示符就会一直显示。在运行该进程的时候,也可以执行其它的操作。
<命令> &
线程
一些进程被细分为更小的部分,将其称之为线程,线程和进程相类似,线程的标识符为TID。进程之间不共享内存和I/O这种系统资源,而同一个进程中的所有线程共享该进程占用的系统资源和一些内存。
很多进程只有一个线程,称为单线程进程。超过一个线程的叫做多线程进程。
Linux中查看某个进程的线程
-
ps -T -p <pid>
-
top -H -p <pid>
top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。