天天看点

CentOS 7进程和计划任务管理(理论+实践)

程序

保存在硬盘、光盘等介质中的可执行代码和数据

静态保存的代码

进程

在<code>CPU</code>及内存中运行的程序代码

动态执行的代码

父、子进程

每个进程可以创建一个或多个进程

简单的说,程序是指电脑可以识别运行的指令集合。进程是一个正在执行的程序。进程是程序的一部分,程序运行的时候会产生进程。

了解系统中进程的状态是对进程进行管理的前提,使用不同的命令工具可以从不同的 角度查看进程状态。

<code>ps</code>命令——查看静态的进程统计信息

命令格式

<code>ps [选项]</code>

常用选项

<code>a</code>:显示当前终端下的所有进程信息,包括其他用户的进程。

<code>u</code>:使用以用户为主的格式输出进程信息。

<code>x</code>:显示当前用户在所有终端下的进程信息。

<code>-e</code>:显示系统内的所有进程信息。

<code>-l</code>:使用长格式显示进程信息。

<code>-f</code>:使用完整的格式显示进程信息。

在上面的输出信息中,第一行为列表标题,其各字段含义如下:

<code>USER</code>:启动该进程的用户账号的名称。

<code>PID</code>:该进程在系统中的数字 ID 号,在当前系统中是唯一的。

<code>%CPU</code>:CPU 占用的百分比。

<code>%MEM</code>:内存占用的百分比。

<code>VSZ</code>:占用虚拟内存(swap 空间)的大小。

<code>RSS</code>:占用常驻内存(物理内存)的大小。

<code>TTY</code>:表明该进程在哪个终端上运行。“?”表示未知或不需要终端。

<code>STAT</code>:显示进程当前的状态,如 S(休眠)、R(运行)、Z(僵死)、&lt;(高优先级)、 N(低优先级)、s(父进程)、+(前台进程)。

<code>START</code>:启动该进程的时间。

<code>TIME</code>:该进程占用的 CPU 时间。

<code>COMMAND</code>:启动该进程的命令的名称。

在上面的输出信息中,我们可以看出两个输出结果相比较来说ps -elf输出的内容更为全面,其列表字段也有些不同,含义如下:

<code>UID</code>:与上面的USER含义相同。

<code>PPID</code>:当前进程的父进程。

<code>C</code> :cpu的占用 。

<code>PRI</code> :优先级(用户态的优先级)。

<code>NI</code> :内核优先级(-20~19) 数值越低优先级越高。

<code>ADDR</code> :运行状态 (-表示正在运行)。

<code>SZ</code> : 表示占用swap交换分区容量。

<code>WCHAN</code>:当前进程内核态的名称

直接执行不带任何选项的 ps 命令时,将只显示当前用户会话中打开的进程:

<code>top</code>命令——查看进程动态信息

使用 <code>ps</code> 命令查看到的是一个静态的进程信息,并不能连续地反馈出当前进程的运行状态。若希望以动态刷新的方式显示各进程的状态信息,可以使用 <code>top</code>命令。<code>top</code>命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括<code>CPU</code>、内存等系统资源占用情况,默认情况下每三秒钟刷新一次,其作用基本类似于<code>Windows</code>操作系统中的任务管理器。

上述输出信息中,开头的部分显示了系统任务<code>(Tasks)</code>、<code>CPU</code>占用、内存占用<code>(Mem)</code>、交换空间<code>(Swap)</code>等汇总信息,相关信息的含义表述如下:

<code>Tasks</code>系统任务信息:<code>total</code>:总进程数;<code>running</code>:正在运行的进程数;<code>sleeping</code>:休眠的进程数;<code>stopped</code>:中止的进程数;<code>zombie</code>:僵死无响应的进程数

<code>CPU</code>占用信息:<code>us</code>:用户占用;<code>sy</code>:内核占用;<code>ni</code>:优先级调度占用;<code>id</code>:空闲 <code>CPU</code>,<code>wa</code>:<code>I/O</code> 等待占用;<code>hi</code>:硬件中断占用;<code>si</code>:软件中断占用;<code>st</code>:虚拟化占用

<code>Mem</code>内存占用信息:<code>total</code>:总内存空间;<code>free</code>:空闲内存;<code>used</code>:已用内存;<code>buff/cache</code>:物理内存和交换内存的缓冲区总和

<code>Swap</code>交换空间占用:<code>total</code>:总交换空间;<code>free</code>:空闲交换空间;<code>used</code>:已用交换空间;<code>avail Mem</code>:可用物理空间。

在top命令模式下还可以通过<code>"c键"</code>会根据<code>CPU</code>占用情况来排序列表;<code>"m键"</code>会根据内存占用情况来排序;<code>“q键“</code>退出模式

<code>pgrep</code> 命令——查询进程信息

通过<code>pgrep</code>命令,可以只指定进程的一部分名称进行查询

常用格式

-l: [进程名称]

-U [用户名称]

-t [终端]

<code>pstree</code> 命令——查看进程树

<code>pstree</code> 命令可以输出<code>Linux</code>操作系统中各进程的树形结构,以更加直观地判断各进程之间的相互关系(父进程、子进程)。

-a:显示完整信息

-u:列处对应用户名

-p:列出对应PID号

也可以只查看属于指定用户的进程树结构,只要指定用户名作为参数即可。

1、启动进程

在 <code>Linux</code>操作系统中,可以由用户手工启动或者按预订计划调度启动新的进程

手工启动进程

前台启动:用户输入命令,直接执行程序

后台启动:在命令行尾加入“&amp;”符号

调度启动

使用<code>at</code>命令,设置一次性计划任务

使用<code>crontab</code>命令,设置周期性计划任务

2、改变进程的运行方式

<code>Ctrl+Z</code>组合键挂起当前的进程

当 Linux 操作系统中的命令正在前台执行时,按<code>Ctrl+Z</code> 组合键可以将当前命令调入后台并停止执行。

<code>jobs</code>命令——查看后台的进程

需要查看当前终端中在后台运行的进程任务时,可以使用 <code>jobs</code> 命令,结合<code>“-l”</code>选项可以同时显示该进程对应的 <code>PID</code>号。

<code>fg</code>命令——将后台的进程恢复运行

使用 <code>fg</code>命令可以将后台任务重新恢复到前台运行。除非后台中的任务只有一个,<code>fg</code> 命令需要指定后台进程的任务编号作为参数。

<code>bg</code>命令——将后台中暂停执行任务在后台恢复执行

使用<code>bg</code>命令,可以将后台中暂停执行(如按<code>Ctrl+Z</code> 组合键挂起)的任务恢复运行,继续在后台执行操作,除非后台中的任务只有一个,否则 <code>bg</code>命令需要指定后台进程的任务编号作为参数。

3、终止进程执行

<code>kill</code>命令——用于终止指定<code>PID</code>号的进程

通过 kill 命令终止进程时,需要使用进程的 <code>PID</code> 号作为参数。无特定选项时,<code>kill</code> 命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合<code>“-9”</code>选项强行终止进程。

<code>killall</code>命令——用于终止指定名称的所有进程

使用<code>killall</code>命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 <code>killall</code> 命令将更加方便,效率更高。<code>killall</code> 命令同样也有<code>“-9”</code>选项。

<code>pkill</code>命令——根据特定条件终止相应的进程

使用 <code>pkill</code>命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与<code>pgrep</code>命令基本类似。

<code>-U</code>:根据进程所属的用户名终止相应进程

<code>-t</code>:根据进程所在的终端终止相应进程

<code>-9</code>:强制结束进程(结合-U命令可以强制指定用户下线)

在<code>Linux</code> 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。<code>CentOS</code> 系统中默认已安装了<code>at</code>、<code>cronie</code>软件包,通过 <code>atd</code>和 <code>crond</code>这两个系统服务实现一次性、周期性计划任务的功能,并分别通过 <code>at</code>、<code>crontab</code> 命令进行计划任务设置。

设置一次性计划任务时,在<code>at</code> 命令行中依次指定计划执行任务的时间、日期作为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带<code>“at&amp;gt;”</code>提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 <code>Ctrl+D</code> 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。

<code>at [HH:MM] [YYYY-MM-DD]</code>

<code>atq</code>命令:查看计划性任务

<code>atrm [序列号]</code>:删除任务

使用<code>crontab</code> 命令设置的计划任务可以按预设的周期重复执行,从而大大减轻设置重复性系统管理任务的操作。启用周期性任务也有一个前提条件,即对应的系统服务<code>crond</code>必须已经运行。

1、<code>crontab</code> 的配置文件和目录

<code>/etc/crontab</code>——系统任务配置文件

)<code>/var/spool/cron/</code>——用户 <code>cron</code>任务的配置文件存放目录

由用户自行设置的<code>cron</code>计划任务将被保存到目录<code>/var/spool/cron/</code>中,文件名与用户名相同。

2、使用 <code>crontab</code> 命令管理用户的计划任务

<code>crontab [选项] [-u 用户名]</code>

-e :编辑计划任务

-l:查看计划任务

-r:删除计划任务

周期性计划任务书写格式

<code>* * * * * run_command</code>

字段

含义

说明

*

分钟

取值为0~59之间的任意整数

小时

取值为0~23之间的任意整数

日期

取值为1~31之间的任意整数

月份

取值为1~12之间的任意整数

星期

取值为0~7之间的任意整数,0或7代表星期日

run_command

命令

要执行的命令或程序脚本

时间数值的特殊表示方法

<code>“*”</code>:表示该范围内的任意时间

<code>“,”</code>:表示间隔的多个不连续的时间点

<code>“-”</code>:表示一个连续的时间范围

<code>“/”</code>:指定间隔的时间频率

33 00 /usr/bin/cp -r /home/sun /opt/ //每天00:33分执行复制命令

~

:wq //保存退出

[root@localhost ~]# crontab -l //查看周期性计划任务

33 00 /usr/bin/cp -r /home/sun /opt/ //设置的周期性计划任务

[root@localhost ~]# crontab -r //删除周期性计划任务

no crontab for root //没有设置的周期性计划任务