首页 > 代码库 > Linux的进程管理和计划任务

Linux的进程管理和计划任务

    系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux的引导过程完了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。

    Linux操作系统的引导流程包括以下阶段:开机自检、MBR引导、GRUB菜单、加载Linux内核、INIT进程初始化

(一)

init进程负责完成一系列的初始化过程

  1. 读取配置文件"/etc/inittab"

  2. 根据配置内容执行脚本文件“/etc/rc.d/rc.sysinit”

  3. 通过“/etc/rc.d/rc”控制应该启动哪些程序和服务

  4. 运行终端程序“/sbin/mingetty”

    决定系统初始化过程的关键在于init进程及其配置文件“/etc/inittab”,决定Linux系统启动后自动运行那些程序的关键在于“/etc/rc.d/rc”脚本,rc脚本根据不同的系统运行级别选择执行不同的目录

    init进程的PID永远为1,不允许被轻易终止。

 

查看“/etc/inittab”文件的有效配置行

[root@localhost ~]# grep -v "^#" /etc/inittab | grep -v "^$"
id:3:initdefault:

四个字段分别为标记、运行级别、动作类型、程序或脚本

1.标记id:由1-4个字符组成,唯一

2.运行级别runlevel:

0 关机

1 单用户模式,不需密码登录,用于维护

3 字符界面多用户模式,大多数服务器运行此级别

5 图形界面多用户模式

3.动作类型action:

initdefault 默认进入的运行级别

sysinit 初始化操作脚本

wait init进程等待对应脚本操作完成后,再执行其他操作

ctrlaltdel 按下ctrl+alt+delet的操作

powerfail 断电时采用何种动作

powerokwait 电源恢复时采用何种动作

respawn 进程被终止,则重启

4.程序或脚本process:对应的实际操作

 

rc.sysinit脚本文件位于“/etc/rc.d/rc.sysinit”,在inittab中配置好的  

rc脚本文件:

    在“/etc/rc.d/rc0.d”~“/etc/rc.d/rc6.d”目录中,保存一些链接文件,所连接的原始文件位于“/etc/rc.d/init.d”目录中。以S开头的文件表示启动,以K开头的文件表示终止。位于“/etc/rc.d/init.d”中的服务脚本可以通过service命令进行管理

查看network服务状态

[root@localhost ~]# service network status
配置设备:
lo eth0
当前的活跃设备:
lo eth0

关闭打印机服务

[root@localhost ~]# service cups stop
停止 cups:[确定]

查看运行级别

[root@localhost ~]# runlevel 
N 3

切换运行级别

[root@localhost ~]# init 5
[root@localhost ~]# runlevel
3 5

设置服务启动或关闭(ntsysv、chkconfig)

ntsysv --level 指定运行级别

具有图形界面,空格切换启动状态,*自启动,空格不自启动,适合设置大量服务的启动状态

 

chkconfig  --list 指定服务名

                --level 指定运行级别    on|off 开启或关闭

查看network服务在各运行级别中的状态

[root@localhost ~]# chkconfig --list network
network         0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

将network服务在运行级别2、4中启动状态设为off

[root@localhost ~]# chkconfig --level 24 network off
[root@localhost ~]# chkconfig --list network
network         0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭

(二)进程管理

ps 查看静态进程

    aux 显示当前终端所有用户所有进程信息

    -elf 长格式显示完整信息

查看系统中进程

[root@localhost ~]# ps
   PID TTY          TIME CMD
  3701 pts/3    00:00:00 bash
  3983 pts/3    00:00:00 ps

top 查看动态进程,每3秒刷新一次

[root@localhost ~]# top
top - 18:05:53 up  9:06,  4 users,  load average: 0.00, 0.00, 0.00
Tasks:  97 total,   1 running,  96 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    744672k total,   273404k used,   471268k free,    53088k buffers
Swap:  1507324k total,        0k used,  1507324k free,    70388k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+ COMMAND                                                                                                  
  3991 root      20   0 15032 1188  924 R  0.3  0.2   0:00.01 top                                                                                                      
     1 root      20   0 19356 1536 1228 S  0.0  0.2   0:01.29 init                                                                                                     
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.02 kthreadd

 pgrep 查询进程信息

-l

-U 对应用户

-t 对应终端

查询init进程的PID

[root@localhost ~]# pgrep "init"
1

查询进程名中包含“log”的PID,并列出进程名

[root@localhost ~]# pgrep -l "log"
1456 rsyslogd
1752 mcelog

ptree 查看进程树

 

控制进程

手工启动:前台启动和后台启动

后台启动:在命令后加&,将命令放到后台运行

调度启动

 

改变进程运行方式

将进程调入后台:Ctrl+D

查看后台进程:jobs -l

将后台进程恢复到前台:fg +编号

终止进程:

kill -9 PID

killall -9 进程名

pkill -9 -U 用户名 -t 终端

 

(三)计划任务管理at、crontab

1.at 一次性任务,前提是atd服务启动

[root@localhost ~]# service atd status

atd (pid  1904) 正在运行...

只设置日期是该日期的当前时间执行

 在当天晚上八点执行任务,统计root用户集成数量并保存到/tmp/ps.root中,Ctrl+D提交

[root@localhost ~]# at 20:00
at> pgrep -U root | wc -l >> /tmp/ps.root
at> <EOT>
job 2 at 2017-03-30 20:00

查看任务列表,显示未执行的

[root@localhost ~]# atq
2       2017-03-30 20:00 a root

 按照编号删除任务
[root@localhost ~]# atrm 2

 

2.crontab 周期性任务 前提是crond服务启动

[root@localhost ~]# service crond status
crond (pid  1889) 正在运行...

 

-e 编辑计划任务列表

-u 属于哪个用户

-l 列表显示

-r 删除任务列表(注意是全部删除!!)

 

打开计划任务编辑页面,与vi操作相同,命令要写路径

每隔五天清空ftp服务器公共目录中的数据,每周一三五下午五点半自动备份

[root@localhost ~]# crontab -e
      1 0 * */5 * * /bin/rm -rf /var/ftp/pub/*
      2 30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd

查看任务列表

[root@localhost ~]# crontab -l
0 * */5 * * /bin/rm -rf /var/ftp/pub/*
30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd

删除计划任务列表,可以看到两条任务都被删除,如果只想删除一条,使用crontab -e来编辑

[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root

 

Linux的进程管理和计划任务