350 likes | 500 Views
本章重点内容. 进程概述 进程管理 守护进程 安排周期性任务. 本章学习目标. 理解进程的相关概念 掌握进程管理命令的使用 理解并管理守护进程 掌握周期性任务的设置方法. 进程的概念. 进程( Process ) 是一个程序在其自身的虚拟地址空间中的一次执 行活动。 之所以要创建进程,就是为了使多个程 序可以并发的执行,从而提高系统的资源利用率 和吞吐量。. 进程的概念. 进程的类型 交互进程:由一个 Shell 启动的进程。交互进程既可以在前台运行,也可以在后台运行。 批处理进程:不与特定的终端相关联,提交到等待队列中顺序执行的进程。
E N D
本章重点内容 进程概述 进程管理 守护进程 安排周期性任务
本章学习目标 理解进程的相关概念 掌握进程管理命令的使用 理解并管理守护进程 掌握周期性任务的设置方法
进程的概念 进程(Process) 是一个程序在其自身的虚拟地址空间中的一次执 行活动。 之所以要创建进程,就是为了使多个程 序可以并发的执行,从而提高系统的资源利用率 和吞吐量。
进程的概念 进程的类型 交互进程:由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。 批处理进程:不与特定的终端相关联,提交到等待队列中顺序执行的进程。 守护进程:在Linux在启动时初始化,需要时运行于后台的进程。
进程的概念 进程的启动方式 手工启动 前台 后台 调度启动 cron crontab at
查看系统中的进程 ps命令功能 可以确定 有哪些进程正在执行和执行的状态 进程是否结束、进程有没有僵死 哪些进程占用了过多的系统资源等
查看系统中的进程 ps命令格式 # ps [选项] 常用选项 a:显示所有进程 e:在命令后显示环境变量 u:显示用户名和启动时间等信息 x:显示所有非控制终端的进程 f:显示进程树 w:宽行输出 -e:显示所有进程 -f:显示全部
查看系统中的进程 操作举例 显示出当前用户在shell下所运行的进程 # ps 只查看用户osmond的进程 # ps -u osmond 列出系统中正在运行的所有进程的详细信息 # ps -aux 显示系统进程树 # ps -auxf
杀死系统中的进程(1) 为什么要杀死进程 该进程占用了过多的CPU时间 该进程锁住了一个终端,使其他前台进程无法运行 运行时间过长,但没有预期效果 产生了过多到屏幕或磁盘文件的输出 无法正常退出
杀死系统中的进程(1) 常用进程信号 HUP/SIGHUP/1:从终端上发出的结束信号,发送给守护进程可使其重新读取配置文件 INT/SIGINT/2:从键盘上发出的中断信号(ctrl+c) QUT/SIGQUT/3:从键盘上发出的退出信号(ctrl+\) KILL/SIGKILL/9:结束接受信号的进程(强行杀死进程) TERM/SIGTERM/15:kill命令默认的终止信号 STOP/SIGSTOP/19:从键盘来执行的信号(ctrl+d)
杀死系统中的进程(1) 在系统中通过向进程发送进程信号实现对进程的控制。 向进程发送进程信号可以使用kill和killall等命令。
杀死系统中的进程(2) kill命令 功能:向指定PID的进程发送进程信号 格式:kill [-signal] <PID> 举例: 杀死PID为1621的进程 $ kill 1621 强行杀死PID为1621的进程 $ kill -9 1621
杀死系统中的进程(2) killall命令 功能:向指定进程名的进程发送进程信号 格式:killall [-signal] <进程名> 举例: 杀死进程名为cat的所有进程 $ killall cat 强行杀死进程名为named的进程 # killall -9 named 使xinetd守护进程重新读取其配置文件 # killall -1 xinetd
作业控制 作业控制 是指控制当前正在运行的进程的行为。 作业控制是Shell的一个特性,使用户能在多个独立进程间进行切换。
作业控制 实施作业控制的常用命令和快捷键 cmd &:命令后的&符号表示将该命令放到后台运行,以免霸占终端 <Ctrl+d>:终止一个正在前台运行的进程(含有正常含义) <Ctrl+c>:终止一个正在前台运行的进程(含有强行含义) <Ctrl+z>:挂起一个正在前台运行的进程 jobs:显示后台作业和被挂起的进程 bg:在后台恢复运行一个被挂起的进程 fg:在前台恢复运行一个被挂起的进程 操作举例:参见教材操作步骤10.1。
守护进程的概念(1) 守护进程(Daemon) 是在计算机启动时就被运行的,并在系统中持续 运行的进程, 它等待着随时为客户提供自身负责 的服务。 守护进程的工作 就是打开一个端口,并且等待(Listen)进入的 连接。 如果客户提请了一个连接,守护进程就创 建(fork)子进程来响应此连接, 而父进程继续 监听更多的服务请求。正因为如此,每个守护进 程都可以处理多个客户服务请求。
守护进程的概念(1) 网络守护进程xinetd(extended internet daemon) xinetd是新一代的网络守护进程服务程序 为了节省资源,引入了xinetd用于监控网络服务,如telnet、talk等。 xinetd就是一个管理很多网络服务的守护进程,它同时监听着它所管理的服务的所有端口, 当有客户提出服务请求时,它会判断这是对哪一个服务的请求,然后再开启此服务的守护进程, 由该守护进程处理客户的请求。 查看系统当前运行的守护进程 pstree
守护进程的概念(2) 守护进程的运行方式 独立运行的守护进程 独立运行的守护进程由init脚本负责管理 独立运行的守护进程的脚本存放在/etc/rc.d/init.d/目录下 所有的系统服务都是独立运行的。如:crond、syslogd、xinetd等 由xinetd运行的守护进程 由xinetd管理的守护进程的配置文件存放在/etc/xinetd.d/目录下 默认的xinetd的主配置文件是/etc/xinetd.conf xinetd本身是独立运行的守护进程 守护进程的分类 系统守护进程:如atd、crond、lpd、syslogd、login等。 网络守护进程:如sshd、httpd、sendmail、xinetd等。
xinetd的配置文件 Red Hat 中xinetd 的配置文件 主配置文件:/etc/xinetd.conf 每一个由xinetd启动的服务在目录/etc/xinetd.d/下都有一个以服务名称命名的配置文件 在主配置文件/etc/xinetd.conf中将/etc/xinetd.d目录下的所有文件的内容使用 includedir /etc/xinetd.d语句包含进来。
管理守护进程 使用GUI工具管理守护进程 redhat-config-services “主菜单”→“系统设置”→“服务器设置”→“服务” 使用TUI工具管理守护进程 ntsysv是一个用于管理自动运行的守护进程的文本用户界面工具。
使用CLI工具(chkconfig)管理守护进程 功能 添加指定的新服务 清除指定的服务 显示由chkconfig管理的服务 改变服务的运行级别 检查指定服务的启动状态
使用CLI工具(chkconfig)管理守护进程 格式 # chkconfig --list [server-name] # chkconfig --add server-name # chkconfig --del server-name # chkconfig [--level levels] server-name <on|off|reset>
使用CLI工具(chkconfig)管理守护进程 说明 server-name:是由chkconfig命令管理的服务的名字。 --list:显示由chkconfig管理的所有服务。 --level levels:指定某服务要在哪个运行级别中开启或关闭,levels的范围在0-6之间。 --add:添加由chkconfig进行管理的指定服务。 --del:删除由chkconfig进行管理的指定服务。 on|off:在指定的运行级别,开启或关闭服务。不指定运行级别时,默认的运行级别是3、4、5。 reset:在指定的运行级别,重置该服务,使其状态返回到操作系统启动时的默认状态。
chkconfig 命令使用举例 查看指定的服务在所有运行级别的运行状态。 # chkconfig --list sendmail 显示由chkconfig管理的所有服务。 # chkconfig --list 添加一个由chkconfig管理的服务。 # chkconfig --add httpd 更改指定服务在指定运行级别的运行状态。 # chkconfig --level 35 httpd on # chkconfig httpd on # chkconfig --level 4 sendmail off # chkconfig imap off
使用CLI工具(service)管理守护进程 功能 启动或终止守护进程。 执行后立即生效。 格式 # service server-name start/stop/restart # service server-name status 说明 server-name:对于独立运行的守护进程就是服务本身;对于由xinetd启动的进程就是xinetd。 start/stop/restart:分别为启动/终止/重新启动服务。 status:查看守护进程当前的运行状态。
service 命令使用举例 终止vsftpd # service vsftpd stop 启动httpd # service httpd start 重新启动xinetd # service xinetd restart 查看named的运行状态 # service named status
cron守护进程简介 功能 安排每小时、每天、每月或每周都要定期执行的进程任务。 cron的运行机制 cron进程搜索crontab文件并载入内存 (crontab文件即/etc/crontab文件和/var/spool/cron/目录下以用户名命名的文件)。 cron进程启动以后,它将首先检查是否有用户设置了crontab文件, 如果没有就转入“休眠”状态,释放系统资源。 cron进程每分钟醒来一次,查看crontab文件决定当前是否有需要执行的命令。 命令执行结束后,任何输出都将作为邮件发送给crontab的所有者。
使用crontab命令安排自动运行的进程任务 功能:使用crontab命令装载cron进程所需要的crontab文件。 格式: 格式1:crontab [-u user] [-l|-r|-e] 格式2:crontab [-u user] filename
使用crontab命令安排自动运行的进程任务 其中: -u user: 修改指定用户的crontab文件。如果不指定该选项,crontab将默认为是操作者本人的crontab。 -l:在标准输出上显示当前的crontab任务。 -r:删除当前的crontab任务。 -e:使用环境变量指定的编辑器编辑crontab文件。当结束编辑离开时,编辑后的文件将自动安装。 filename:是一个crontab文件的来源文件 自动安排进程任务举例(参见教材操作步骤10.2)
crontab文件的来源文件 crontab文件的来源文件存在的形式 一个符合语法规则的纯文本文件,使用第2种格式的crontab命令装载 使用第2种格式的crontab命令时,它是一个文本编辑器(如vi)的临时文件,编辑结束自动装载 crontab文件的来源文件的格式 每一行格式为: minute hour day-of-month month-of-year day-of-week [username] commands
crontab文件的来源文件 其中: minute:一小时中的哪一分钟(0~59) hour:一天中的哪个小时(0~23) day-of-month:一月中的哪一天(1~31) month-of-year:一年中的哪一月(1~12) day-of-week:一周中的哪一天(0~6) username:以指定的用户身份执行commands commands:执行的命令(可以是多行命令或者是脚本调用) 五个时间字段的语法说明 不能为空,可以使用统配符*表示任何时间。 可以指定多个值,它们之间用逗号间隔。例如:1,3,7。 可以指定时间段,用减号间隔。例如:0-6。 可以用/n表示步长。例如:8-18/2表示时间序列8,10,12,14,16,18。
Red Hat 安排cron任务 除了每个用户都可以安排自己的cron任务之外, Red Hat 还为超级用户提供了一种方便的自动安排进程任务的方法。
Red Hat 安排cron任务的方法 涉及的文件和目录 /etc/crontab # cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Red Hat 安排cron任务的方法 涉及的文件和目录 /etc/cron.daily /etc/cron.monthly /etc/cron.weekly /etc/cron.hourly 超级用户可以在/etc/cron.*目录下建立脚本文 件来安排cron任务, 且在脚本中只需写要安 排执行的命令。
控制安排crontab任务的人员 两个控制文件 允许表:/etc/cron.allow 拒绝表:/etc/cron.deny /etc/cron.allow文件和/etc/cron.deny文件的格式 每行只能包含一个用户名,且不能有空格字符。 cron进程读取控制文件的顺序 首先查找/etc/cron.allow文件,若该文件存在,则只有包含在此文件中的用户允许使用cron。 若/etc/cron.allow文件不存在,系统继续查找/etc/cron.deny文件,若该文件存在, 则只有包含在此文件中的用户禁止使用cron。 无论root是否包含在/etc/cron.allow文件或/etc/cron.deny文件中,root都可以使用cron。