Linux学习基础篇(进程管理与任务计划)

1、进程管理

1.1、进程的概念与分类

进程,Process,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是在自身虚拟地址空间运行的一个独立的程序,是程序的实体。

Linux中进程的分类

1、系统进程:可以执行内存资源分配和进程切换等管理工作的进程,由操作系统启动并管理,这类进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。

2、用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,这类进程可以在用户的控制下运行或关闭,用户进程具体可分为以下三种

  • 交互进程:由一个shell终端启动的进程,在执行过程中需要与用户进行交互
  • 批处理进程:该进程是一些进程的集合,负责按顺序启动其他的进程
  • 守护进程:守护进程是一种一直运行的进程,通常在系统启动时运行,在系统关闭时终止

在Linux中,进程ID(PID)是区分不同进程的唯一标识,它的大小是有限制的,最大ID为32768,用UID和GID分别表示启动这个进程的用户和用户组。所有进程都是PID为1的进程(使用sysvinit为init进程,使用systemd为systemd进程)的子进程。用PPID表示进程的父进程。

1.2、进程的管理

1.2.1、ps命令

ps命令可查看进程在瞬间的运行状态,常见的组合有ps -ef和ps -aux,命令详细使用查看另一篇博客https://www.cnblogs.com/yu2006070/p/9243328.html。这里补充一点,使用该命令查看的显示信息中,用中括号括起来的进程一般为系统进程;另外系统进程都排列在前面,因为系统进程早于用户进程启动。

1.2.2、top命令

top命令用于实时查看进程系统占用状况,详细使用查看博客https://www.cnblogs.com/yu2006070/p/9243328.html。这里补充一点,在top显示界面下,按f键可修改top命令显示的列信息。

1.2.3、lsof命令

lsof命令可以用于列出进程打开的文件,命令语法如下:

lsof [选项]

常用选项:

  • -p PID:显示进程打开的所有文件
  • -c 进程名:显示进程打开的所有文件
  • -i [tcp/udp]:端口号:通过监听指定的协议、端口号等信息,显示符合条件的进程
  • -u UID:列出UID号进程详情
  • -g GID:列出GID号进程详情

命令执行结果详解:

lsof 1

通过该命令还可以看到连接情况:

lsof 2

lsof命令一般用于查看进程占用的文件数,因为Linux对于每个进程打开的文件数量有限制,如果超出了最大文件数,会导致进程异常。

1.2.4、pgrep命令

pgrep命令用于通过程序名查询进程PID,它通过检查程序在系统中活动的进程,输出进程属性匹配指定条件的进程ID,命令语法如下:

gprep [选项] 程序名

常用选项:

  • -o:仅显示找到的最小(起始)进程号
  • -n:仅显示找到的最大(结束)进程号
  • -l:显示进程名称
  • -f:使用完成的进程名匹配

1.2.5、kill命令

kill命令用于根据PID杀死一个进程,命令语法如下:

kill [信号类型] PID

信号类型:信号类型决定了kill如何结束一个进程,通过kill –l可以查看所有的信号类型。常用的信号类型有

  • SIGKILL,9,强制结束进程
  • SIGTERM,15,正常结束进程,kill的缺省选项
  • SIGINT,2,结束进程,但并不是强制性的,通过ctrl+c发出的就是一个kill -2信号

特殊的:kill –0,用于对进程进行试探,检测该进程是否存在及运行。

1.2.6、killall命令

killall命令用于根据进程名杀死一个或一组进程,命令语法如下:

killall [信号类型] 进程名

这里的信号类型同kill命令。

2、Linux下的任务计划

2.1、crond的概念和分类

crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与Windows下的任务计划类似。

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

系统任务调度:系统所要执行的周期性工作,如将缓存写入硬盘、日志清理等。系统任务的配置文件为/etc/crontab以及以下目录中的文件/etc/cron.d、/etc/cron.daily、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly

用户任务调度:用户定期要执行的任务。用户可以使用crontab工具来定制自己的任务计划。用户定义的crontab文件保存在/var/spool/cron目录下,以用户名命名。

2.2、使用crontab工具

crontab命令语法如下:

crontab [-u 用户] [文件]|[选项]

参数含义:

  • -u:用来设定某个用户的任务计划,此参数一般由root运行,不指定该参数则为当前用户的任务计划
  • 文件:命令文件,表示将该文件作为crontab的任务列表并载入crontab。如果在没有指定该文件,crontab将接收标准输入上键入的命令

常用选项:

  • -e:编辑用户的crontab文件
  • -l:显示用户的crontab文件内容
  • -r:从/var/spool/cron目录中删除用户的crontab文件
  • -i:在删除用户的crontab文件时需要确认

2.3、crontab文件格式

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式分为六个字段,前五个字段为时间设定字段,第六个字段为要执行的命令,具体格式如下:

minutes hour day month week command

  • minutes:分钟,可以是从0到59之间的任何整数
  • hour:小时,可以是从0到23之间的任何整数
  • day:日期,可以是从1到31之间的任何整数
  • month:月份,可以是从1到12之间的任何整数
  • week:星期,可以是从0到7之间的任何整数,这里的0或7代表星期日
  • command:执行的命令,可以是系统命令,也可以是编写的脚本

以上的各个字段中,还可以使用以下特殊字符:

  • *:代表所有的值
  • ,:用逗号隔开的值指定一个列表,如1,3,5
  • -:表示一个整数范围,如2-6表示从2到6的几个数
  • /:指定时间的间隔频率,如minutes字段的*/3表示每三分钟执行一次

一些例子:

# 在每天的3点执行/data/run.sh
0 3 * * * /data/run.sh

# 每个三个小时执行一次/data/run.sh
0 */3 * * * /data/run.sh

# 在每周五的凌晨三点半执行/data/run.sh
30 3 * * 5 /data/run.sh

crontab执行任务的日志存储在/var/log/cron文件中,可以通过查看该日志检验任务是否正常执行。

2.4、crontab使用中的注意事项

环境变量导致任务无法执行

手动执行任务不存在问题,但是无法自动执行任务,这种情况一般是crontab文件中没有配置环境变量引起,可以在crontab文件中添加source 环境变量配置文件来指定加载的环境变量。如:

加载xxx用户的环境变量

#crontab文件中添加
source /home/xxx/.bashrc

清理用户的邮件日志

当命令在后台运行时,如果该命令有输出,则会通过邮件形式输入到邮件日志中,邮件日志位于/var/mail目录中,每个用户由以用户名命名的文件,如果任务运行时一直往该日志中发送信息,则会导致日志文件体积增大,可以使用以下方法忽略任务的日志输出:

minutes hour day month week command>/dev/null 2>&1

系统级任务与用户级任务

用户级的任务可以放到系统级任务调度中完成,但是系统级的任务无法使用用户级来调度。

原文地址:https://www.cnblogs.com/yu2006070/p/9327430.html