进程管理
一、进程的概念与分类
进程的的基本定义是:在自身的虚拟地址空间运行的一个独立的程序,从操作系统的角度来看,所有在系统上运行的东西,都可以称为一个进程。
进程的分类:
系统进程:可以执行内存资源分配和进程切换等管理工作;而且,该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。
用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。
批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
守护进程:守护进程是一直运行的一种进程,经常在linux系统启动时启动,在系统关闭时终止。例如httpd进程,一直处于运行状态,等待用户的访问。还有经常用的crond进程,这个进程类似与windows的计划任务,可以周期性的执行用户设定的某些任务。
二、进程的监控与管理
在linux系统中,进程ID(用PID表示)是区分不同进程的唯一标识,它们的大小是有限制的,最大ID为32768,用UID和GID分别表示启动这个进程的用户和用户组。所有的进程都是PID为1的init进程(centos7.x版本是systemd进程)的后代。内核在系统启动的最后阶段启动init进程,因而,这个进程是linux下所有进程的父进程,用PPID表示父进程。
1、lsof命令
作用:列出当前系统打开文件的工具
格式:lsof 选项 进程pid
选项:-c 后跟进程名显示进程现在打开的文件
-p 后跟pid通过进程号显示程序打开的所有文件及相关进程
-i 后跟端口号通过监听指定的协议、端口、主机等信息,显示符合条件的进程信息。
-g 后跟pid显示进程的进程情况
2、ps命令
作用:查看系统中的进程状态
格式:ps 选项
选项:
-a |
显示所有进程(包括其他用户的进程) |
-u |
用户以及其他详细信息 |
-x |
显示没有控制终端的进程 |
在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。
常用选项组合:
aux:列出目前所有的正在内存当中的程序
3、pgrep命令
作用:通过程序的名字来查询进程pid的工具,它通过检查程序在系统中活动的进程,输出进程属性匹配命令行上指定条件的进程的ID
格式:pgrep 进程名
4、killall命令
作用:关闭进程
格式:killall 选项 进程名称
选项:-9 :表示强制结束进程
-2 :表示结束进程,但是并不是强制性的
-15 :表示正常结束进程
5、kill命令
作用:关闭进程
格式:kill 选项 pid
选项:-l 查看所有选项
-9 :表示强制结束进程
-2 :表示结束进程,但是并不是强制性的
-15 :表示正常结束进程
6、top命令
作用:动态地监视进程活动与系统负载等信息
格式:top
命令输出:
输出解析:第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如"97.1 id"意味着有97.1%的CPU处理器资源处于空闲。
第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量
7、crontab命令
作用:设置系统定时任务
格式:crontab 选项
开启服务:开启:systemctl start crond.service/service crond start
开机自启:systemctl enable crond.service/chkconfig crond on
选项:-u user:用来设定某个用户的crontab服务,例如,"-u ixdba"表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
操作:进入crontab编辑界面,会使用vim编辑工作。
* * * * * 执行任务:
项目 |
含义 |
范围 |
第一个* |
一小时的第几分钟 |
0-59 |
第二个* |
一天中第几小时 |
0-24 |
第三个* |
一月中第几天 |
1-31 |
第四个* |
一年中第几个月 |
1-12 |
第五个* |
一周之中的星期几 |
0-7(0和7均为星期天) |
特殊符号:
* |
代表任意时间 |
, |
代表不连续时间中的分隔符 |
- |
代表连续的时间范围 |
*/n |
代表每多久执行一次 |
使用crontab工具的注意事项:
(1)、注意环境变量问题
有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
(2)注意清理系统用户的邮件日志
可以在crontab文件中设置如下形式,忽略日志输出:
0 */3 * * * /usr/local/apache2/apachectlrestart >/dev/null 2>&1
(3)、系统级任务调度与用户级任务调度
系统级任务调度主要完成系统的一些维护操作(比如定时重启机器),用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行。