一、进程简介
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。而在 Linux 操作系统中,每个程序启动后可以创建一个或多个进程。
二、进程和程序的关系
1、程序 程序是保存在硬盘、光盘等介质中的可执行代码和数据,是一种静态保存的代码。 2、进程 进程是在CPU及内存中运行的程序代码,是一种动态执行的代码。每一个进程可以创建一个或多个进程,这些进程间是“父子关系”,因而称为父子进程。
三、查看进程信息
1、ps命令——查看静态的进程统计信息
ps命令用于显示包含当前运行的各进程完整信息的静态快照。通过不同的命令选项,可以有选择性地查看进程信息。
(1)a:显示当前终端下的所有进程信息,包括其他用户的进程。
(2)u:使用以用户为主的格式输出进程信息。
(3)x:显示当前用户在所有终端下的进程信息。
(4)-e:显示系统内的所有进程信息。
(5)-l:使用长(Long)格式显示进程信息。
(6)-f:使用完整的(Full)格式显示进程信息。
如图我们执行“ps aux”命令能够看到以简单列表的形式显示出进程信息。
上述图中个字段的含义如下。
USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的。
%CPU:CPU 占用的百分比。
%MEM:内存占用的百分比。
VSZ:占用虚拟内存(swap 空间)的大小。
RSS:占用常驻内存(物理内存)的大小。
TTY:表明该进程在哪个终端上运行。“?”表示未知或不需要终端。
STAT:显示进程当前的状态,S(可中断休眠)、R(运行)、Z(僵死)、<(高优先级)、
N(低优先级)、s(父进程)、+(前台进程)。
START:启动该进程的时间。
TIME:该进程占用的 CPU 时间。
COMMAND:启动该进程的命令的名称。
如图我们执行“ps -elf”命令将以长格式显示系统中的进程信息。
上述图中部分字段含义与短格式不同如下。
PPID:当前进程父进程。
PRI:用户态优先级。
NI:内核态优先级(-29~19,数值越低,优先级越高)。
ADDR:“-”表示正在运行。
SZ:占用交换分区的内存。
WCHAN:当前进程在内核中的名称。
2、top命令——查看动态的进程排名信息
top 命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括 CPU、内存等系统资源占用情况, 默认情况下每三秒钟刷新一次,基本类似于 Windows 操作系统中的任务管理器。
上述图中的部分字段含义如下。
sy:内核占用。
ni:优先级调度占用。
id:空闲CPU。
wa:I/O读写占用。
hi:硬线程占用。
si:软线程占用。
st: 虚拟化占用。
buff/cache:缓存。
avail Mem:物理内存占用。
我们可以直接按C键查看CPU占用,也可以按M键查看内存占用,按Q键退出查看。
3、pgrep命令——查询进程信息
pgrep 命令,可以只指定进程的一部分名称进行查询。
常用选项:
-l:同时输出对应的进程名。
-U:查询特定用户的进程。
-t:查询在特定终端运行的进程。
如图执行“pgrep -l "log"”命令查询进程名中包含"log" 的进程及其 PID 号。
如图执行“pgrep -l -U czt”命令查询特定用户的进程。
4、pstree命令——查看进程树
pstree 命令可以输出 Linux 操作系统中各进程的树形结构,以更加直观地判断各进程之间的相互关系(父、子进程)。
常用选项:
-p:选项使用时可以同时列出对应的 PID 号。
-u:选项可以列出对应的用户名。
-a:选项可以列出完整的命令信息。
如图我们执行“pstree -aup”命令查看当前系统的进程树,包括各进程对应的 PID 号、用户名、完整命令等信息。
四、进程的启动方式
1、手工启动
前台启动:进程在前台运行时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。
后台启动:启动后台进程需要使用“&”符号,将“&”符号放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。
如图我们需要复制系统镜像里的目录内容但不影响正常使用,可以执行“cp -r /mnt/Packages/ /opt/ &”命令将该进程放入后台运行。
如果想看后台进程可以执行“jobs -l”命令即可。
2、改变进程的运行方式
(1)挂起进程,即调入后台并停止运行——Ctrl+Z组合键。
如图当我们正在复制目录,然后按下Ctrl+Z组合键就会停止该进程并调入后台。
(2)将后台进程恢复到前台运行,可指定任务号——fg命令。如图执行“fg 1”命令恢复进程值前台运行。
3、终止进程执行
(1)终止指定PID号的进程——kill命令
如图执行“kill -9 42758”命令强行终止任务,可以看到进程任务被杀死。
(2)终止指定名称的所有进程——killall命令
如图我们执行“killall -9 -vim”命令即可终止所有vim的进程。
(3)根据特定条件终止相应的进程——pkill命令
常用选项:
-U:根据进程所属的用户名终止相应进程。
-t:根据进程所在的终端终止相应进程。
如图我们执行“pkill -9 -U czt”俩终止该用户的所有进程,可以看到该用户直接就被踢出到登录界面了。
4、调度启动
(1)一次性计划任务——at命令。
设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。
如图先知执行“date”命令获取系统时间,然后执行“at”命令执行的时间、日期等参数并提交任务,在执行“atq”命令查看任务列表。
下面我们执行查看命令去去相应目录下查看任务结果即可。
(2)周期性任务设置——crontab命令
配置文件:/etc/crontab
我们执行“cat /etc/crontab”命令来查看一下配置文件,该文件中包括设置 Shell环境、可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。
分钟:取值为从0到59之间的任意整数
小时:取值为从0到23之间的任意整数
日期:取值为从1到31之间的任意整数
月份:取值为从1到12之间的任意整数
星期:取值为从0到7之间的任意整数,0或7代表星期日
命令:要执行的命令或程序脚本
crontab命令常用选项:
1)-e:编辑计划任务列表。
2)-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户,一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
3)-l:列表显示计划任务。
4)-r:删除计划任务列表。
如图我们执行“crontab -e”命令进入编辑任务列表,按“I”键进入编辑模式,输入“49 13 * * * /usr/bin/cp -r /home/czt /opt”然后保存退出。(与使用vi编辑器类似的操作)
我们再执行“crontab -l”列表查看计划任务。
下面我们去/opt目录下查看任务结果。
如果我们想要删除所有的计划任务直接执行“crontab -r”即可。