一、进程简介

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。而在 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”即可。