本章结构
查看进程
控制进程
at一次性任务设置
crontab周期性任务设置
程序和进程的关系
程序
保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码
进程
在CPU及内存中运行的程序代码
动态执行的代码
父、子进程
每个程序可以创建一个或多个进程
查看进程信息ps
ps命令
查看静态的进程统计信息
【root@localhost~】#ps aux
支持三种选项:
“ps aux” 查看系统中的所有进程
“ps -le”可以查看系统中所有的进程,而且还能看到进程的父进程的PID和进程优先级
“ps -l”只能看到当前Shell产生的进程
常用选项
a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选择结合时将显示系统中所有的进程信息。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程信息。
-e:显示系统内的所有进程信息。
-l:使用长(Long)格式显示进程信息。
-f:使用完整的(Full)格式显示进程信息。
k| --sort属性对属性排序,属性前加-表示倒序
僵尸进程:
一个进程结束了,但是如果该进程的父进程已经结束了,那么该进程就不会变僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由init来接管它,成为它的父进程,子进程推出后init会回收占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此子进程将成为一个僵尸进程。
父进程退出 子进程没有退出 那么这些子进程就没有父进程管理了,变成僵尸进程。
子进程已经结束了,父进程没有意识到。
查看进程信息top
top命令
查看动态的进程排名信息
【root@localhost~】#top
查看进程信息pgrep
pgrep命令
根据特定条件查询进程PID信息
pstree命令
以树形结构列出进程信息
pstree 【OPTION】【PID】【USER】
常用选项
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高量显示指定进程及其前辈进程
一次性任务
at
at 工具
-
由包 at 提供
-
依赖与atd服务,需要启动才能实现at任务
-
at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
-
执行任务时PATH变量的值和当前定义任务的用户身份一致
at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:
-
如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
-
如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
-
如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。
系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可
crontab周期性任务
crontab
-u 用来设定某个用户的crontab服务,此选项一般由root用户来运行
-e 编辑某个用户的crentab文件内容。如果不指定用户,则表示编辑当前用户的crentab文件
-l 显示某用户crentab文件内容,如果不指定用户,则表示显示当前用户的crentab文件内容
-r 从/var/spool/cron删除某用户的crentab文件,如果不指定用户,则默认删除当前用户的crentab文件
-i 再删除用户的crentab文件时,给确认提示
crentab -e
#进入crentab编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务
在时间表示中,还有一些特殊符号需要学习
在书写crentab定任务时,需要注意一下几个事项。
6个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
crentab定时任务的最小有效时间是分钟,最大有效时间是月。像2018年某时执行,3点30分30秒这样的时间都不能被识别。
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。