赞
踩
经过前面的知识点,我们知道Linux是一种多用户、多任务、支持多线程和多CPU的操作系统,即系统可以有多个用户同时工作,且每个用户又可以完成多个任务,这其中通过对进程的管理,来实现对用户和系统的各种命令和程序的运行管理。
动态的
,Linux操作系统中把进程定义为一个可执行程序的一次执行实例
(一段程序的执行过程),可以说一个程序可以同时拥有多个进程,程序是可以长期存在的,而每个进程由于都有其一定的生命周期,它们是暂时的且生命周期中包括多种不同运行阶段。同样,Linux操作系统与Windows系统一样,它也有很多后台进程,这些后台进程涉及很多方面,例如系统初始化、网络连接、外部设备、通信端口等等。
可以相互转换
,处于就绪态的进程已经做好准备,等待分配资源,一旦获得CPU就可以运行;运行态的进程正在占用CPU以及其他资源;睡眠态的进程由于某种条件未满足,致使无法继续运行,从而让出CPU后的等待状态。1、通过ps命令可以查看当前正在执行的进程
,如下可看到当前用户有两个进程在执行(这里标题行的含义一会解释):
当我们再次通过ps命令查看时,可以发现两次结果近乎相同,但区别在于PID(进程号)的不同,如下:
每个进程创建时都会得到一个PID
,在这个进程的生命周期内,该进程号唯一标识该进程,第一次执行的ps命令这个进程执行完毕,第二次执行的ps命令该进程是一个新的进程,所以对应的PID进程号不同。
(1)下表是使用ps命令,标题行中常见的标题含义:
标题行名称 | 含义 |
---|---|
F | 旗标 |
S | 进程的状态 |
C | 调度参数,反映进程占用CPU的情况 |
UID | 进程所有者的登录名 |
PID | 进程号 |
PPID | 创建当前进程的父进程的PID |
TTY | 启动该进程的终端号 |
TIME | 占用CPU的时间 |
STIME | 进程的启动时间 |
CMD | 进程所产生的命令 |
(2)进程的状态:
状态 | 含义 |
---|---|
D | 无法中断的休眠状态 (通常指 IO 的进程) |
R | 正在运行状态 |
S | 休眠状态 |
T | 暂停或被追踪状态 |
W | 内存交换状态 |
Z | 不存在状态,或僵死状态暂时无法消除 |
2、在ps命令后带上参数-A/All
可查看所有进程,带上参数-aux
可查看所有的静态进程,带上参数-top
可查看所有的动态变化的进程,如下查看所有进程:
[yyx@yyx12 ~]$ ps -All
在Linux终端输入命令:
标题行中第二项“S”即为进程的状态,这里可看到有S(休眠状态)和R(正在运行状态)两种进程状态:
3、通过在ps命令后带上参数-f
,可以显示每个进程的完整信息
,如下:
[yyx@yyx12 ~]$ ps -f
在Linux终端输入命令,可以看到标题行还显示了UID、PPID、TTY等标题信息:
4、通过在ps命令后带上参数-e
,可以显示系统中所有活动进程的信息
,如下:
[yyx@yyx12 ~]$ ps -e
在Linux终端输入命令,这里TTY项下显示的问号代表的含义是系统在初始启动时,该进程是根据系统配置参数自动启动运行的,故没有相应的对应终端号:
其实一般常用的是,直接在ps命令后带上参数-ef,用于查看所有进程以及命令行
,如下:
[yyx@yyx12 ~]$ ps -ef
在Linux终端输入命令:
暂停进程
可以通过sleep命令,它也可以用来使相关要执行的操作进行延迟
相应的时间,从而控制程序的运行,该命令后可直接跟时间,即s(秒)、m(分钟)、h(小时)、d(天)。例如下列命令,在延迟5秒钟后执行echo命令输出内容,如下:
[yyx@yyx12 ~]$ sleep 5s;echo "It's five seconds later."
在Linux终端输入命令,此时等待5s:
5s延迟之后,echo命令输出内容:
若要终止前台进程,我们知道可以Ctrl+C
键来终止,但有时候有些进程无法终止,例如后台进程,无法方便地终止该进程,此时就可以通过kill命令
进行终止,其后跟信号编号(发送给该进程的信号)和PID进程号(PID数值最小的进程最先运行),另外普通用户只能终止自己的进程,而具有超级用户权限的系统管理员可以终止系统中任何进程。
kill signal PID #signal为信号,PID为进程号,PID可以通过ps命令查到
9号信号:
9号信号
来终止这种进程,即kill命令后跟9(即信号编号为9),再跟进程号PID。用户完成某项任务而启动的进程
,一个作业既可以只包含一个进程
,也可以包含多个进程
,进程之间互相协作完成任务。例如下列命令就是一个作业,它包括多个命令,在执行时Shell将启动两个进程:
[yyx329@192 ~]$ cat /etc/filesystems | grep xfs
[yyx329@192 ~]$ cat /etc/filesystems | grep ext
在Linux终端输入命令:
在之前的文章中讲过前台命令和后台命令:Linux操作系统笔记——Shell 命令解释器的基本知识,即放在后台执行的程序(命令)称为后台命令,可以在命令的后面加上“&”符号从而让Shell识别这是一个后台命令,后台命令不用等待该命令执行完成,就可立即接收新的命令,另外后台进程执行完后会返回一个作业号
以及一个进程号
(PID)。
例如下列命令,返回了一个作业号和进程号:
[yyx@yyx12 ~]$ su root
...
[root@yyx12 yyx]# ls -l > /home/newfile &
...
在Linux终端输入命令,可见第一行返回的作业号是1,进程号为9665:
第二行显示的是作业号、状态和所执行的命令,第二行[1]后面的“+”号下面会有解释。
常见的作业状态如下表:
作业状态 | 含义 |
---|---|
正在运行【Running】 | 后台作业(&),表示正在执行 |
完成【Done】 | 作业已完成,返回的状态码为0 |
完成并退出【Done(code)】 | 作业已完成并退出,返回的状态码为非0 |
已停止【Stopped】 | 前台作业,当前被Ctrl+Z挂起 |
已终止【Terminated】 | 作业被终止 |
例如我们在执行某个作业时,想要将该作业挂起,此时可以通过Ctrl+Z
键,然后Shell会显示相关的作业号、状态和所执行的命令信息。
例如,通过vi命令编辑在/home目录下名称为newfile文件,通过Ctrl+Z暂时挂起该作业:
[yyx@yyx12 ~]$ vi /home/newfile
在Linux终端输入命令:
返回到vi编辑器的命令模式下(Esc键),然后再通过Ctrl+Z挂起该作业,可看到下面信息:
若想将挂起的作业切回,可以通过fg
命令,fg后面可跟作业号
或作业的命令名称
,若参数缺省则会将作业号为1的作业切到前台来执行,若当前系统只有一个作业在后台进行,则可以直接使用fg命令不带参数。
fg命令的参数如下表:
参数 | 含义 |
---|---|
%n | n为正整数,表示作业号 |
%string | 以字符串开头的命令所对应的作业 |
%?string | 包含字符串的命令所对应的作业 |
%+或%% | 最近提交的一个作业 |
%- | 倒数第二个提交的作业 |
例如对刚刚挂起的vi /home/newfile进行切换至前台执行:
[yyx@yyx12 ~]$ fg
在Linux终端输入命令,可见切回vi编辑页面:
可以通过直接输入jobs
命令查看本用户当前后台执行或挂起的作业,若带参数-l
则显示作业的详细信息,带参数-p
则只显示作业的PID。
例如,直接通过jobs命令显示刚刚挂起的作业,如下:
默认作业:
对于一个用户来说,只能有一个默认作业(+),同时也只能有一个即将成为默认作业的作业(-),当默认作业退出后,该作业会成为默认作业,作业号后的符号标识含义如下表:
符号标识 | 含义 |
---|---|
+ | 表示该作业号是默认作业 |
- | 表示该即将成为默认作业 |
无符号 | 其他作业 |
当通过fg命令切回作业时,若没有指定作业以及参数,此时会将默认作业切到前台执行,即带有“+”的作业号的作业,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。