进程查看机制
ps
(process state缩写)命令是进程查看命名,用于Linux系统中所有的进程查看。在当前文件夹下执行如下命令ps
,显示:
PID TTY TIME CMD
7784 pts/1 00:00:00 zsh
7813 pts/1 00:00:00 ps
一般可以使用ps -aux
以BSD风格显示进程所有数据,各个字段的意义:
其中STAT字段的意义如下:
注意,
ps
命令不是动态更新的,即其输出的只是执行完命令瞬间后,各个进程的状态;如果要观测动态的,需要执行top
命令。
pstree
命令用于树型显示进程的父子关系。
Linux系统中,一个进程是程序的一次执行。一个进程由三个部分组成:
- 程序的读取上下文,表示程序读取的执行状态
- 程序当前的执行目录
- 程序服务的文件和目录
- 程序的访问权限
- 内存和其他分配给进程的系统资源
程序分为代码段、数据段和堆栈段。代码段存储程序代码的数据,假设多个进程共享一个程序,它们就可以使用同一个代码段。数据段存放全局变量、常数和动态数据分配的数据空间。堆栈段分配子程序的返回地址、子程序的参数和局部变量,堆栈段包括在程序控制块PCB中。
进程管理
进程可以手工启动或者调度启动。手工启动直接在shell中执行,shell会等待进程执行完毕。命令后添加一个&
符号,表示后台启动一个程序。终端前台程序,需要Ctrl+C组合。Ctrl+Z是把当前进程挂起,之后输入bg
命令,可以转换到后台。如果shell中有运行的后台程序,那么输入fg
可以把后台转前台(适合只有一个后台的情况)。
显示的意义是:<任务编号> <当前进程> <进程状态> <命令内容>
jobs
命令显示当前shell被挂起的进程和后台进程的状况。有三个参数:
-l
:显示进程的PID-n
:最后一次通知后停止或退出的作业-p
:显示所选定的作业的进程组引导符的进程标识
fg
把后台作业移动到前台,如果没有参数,则默认把最近挂起的一个提到前台,用法是
fg JobID
其中,JobID
的意义可以是:
- 进程的标识号
%Number
通过作业编号引用作业%String
引用名称以特定字符串开头的作业%?String
引用名称中包含特定字符串的作业%+ OR %%
引用当前作业,-
表示前一个作业
bg
参数的用法同fg
信号
Linux有很多不同类型的信号,可以使用kill -l
来显示,常见的信号的意义:
Linux的
kill
命令用来向进程发送信号。常用的用法是:
kill -SIGSTP 23940
如果强制杀死一个进程,可以使用:
kill -9 PID
PID
是特定的进程号,-9
是SIGKILL
。只要执行该指令,进程立刻退出。
Linux的init进程
init
进程的PID是1,这是操作系统的第一个进程,主要用来执行初始化脚本和监视进程。注意/etc/inittab
这个文件,这是init
进程用于初始化的配置文件(貌似Ubuntu系统没这个)。。
基本格式如下:
id:runlevels:action:process
id
配置行的唯一标识runlevels
配置试用的运行级别,可以有多个级别,也可以填入多个级别:
-
action
可以有多个选项:
-
process
:为init
执行的进程,这些进程保存在/etc/rc.d/rcX
中,X表示运行级别,rc
程序接受X参数。这些程序都是链接符号。具体可以参考有关资料关于怎样配置init进程。
任务调度系统
一般涉及到crontab
命令和at
命令。crontab
命令用于调度重复性任务,而at
命令用于在特定的时间调度单个系统任务。一些自动化的脚本任务,可以通过这两个命令执行。
与crontab
命令不同,at
文件只执行一次任务,之后便从目录中删除这些文件。at
命令在/var/spool/cron/atjobs
目录中存储要执行的命令或者脚本,以及当前环境变量的副本。at
作业文件名是一个长数字,用于指定该文件在at
队列中的位置,以.a
问扩展名。cron
进程在启动时检查at
作业,并贞听是否提交了系作业。cron
进程执行at
作业后,将从atjobs
目录中删除at
作业。
具体关于cron
和at
的用法,可以查阅详细的资料,不在赘述。
描述进程的/proc
文件系统
Linux下一切介文件。/proc
是一个虚拟文件系统,这是为了内核和内核模块向进程发送消息用的。该系统是用户和内核之间的接口,可以使用ls /proc
查看文件系统的内容。有一些常用的文件:
具体关于进程文件系统的信息,可以参考其他资料。