北在北方

太白枝头看,花开不计年,杯中浮日月,楼外是青天。

导航

Linux进程管理

Posted on 2013-01-01 23:18  CN.programmer.Luxh  阅读(517)  评论(0编辑  收藏  举报

一、进程的概念

  1、进程和程序的区别

    1)程序是静态的概念,本身作为一种软件资源长期保存,而进程是程序的执行过程,它是动态概念,有一定的生命周期,是动态产生和消亡的

    2)程序和进程无一一对应关系,一个程序可以由多个进程共用;另一方面,一个进程活动中可以顺序地执行若干程序

  2、父进程与子进程

    1)子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程

    2)在Linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境

    3)父进程终止,子进程自然终止

  3、前台进程和后台进程

    1)在Shell提示处输入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,用户在它完成之前不能执行其他命令  

[root@bogon ~]# find /etc -name init
/etc/kdump-adv-conf/kdump_initscripts/init
/etc/webmin/init
/etc/init
/etc/sysconfig/init
[root@bogon ~]#

    2)在Shell提示处输入命令后,若后随一个&,Shell创建的子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与Shell同步运行,即在后台运行,后台进程必须是非交互式的。

[root@bogon ~]# find /etc -name init > /tmp/init.find &
[1] 1656
[root@bogon ~]# 

    1656为处理该命令的子进程ID

  4、进程状态

    1)就绪:进程已经分配到资源,但因为其他进程正占用CPU,所以暂时不能运行而等待分配CPU的状态

    2)等待:因等待某种事件而暂时不能运行的状态

    3)运行:进程分配到CPU,正在处理器上运行

  5、查看所有登录用户信息 w

[root@bogon ~]# w
 22:05:30 up 56 min,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                21:10   54:31   0.05s  0.05s -bash
root     pts/0    192.168.0.101    21:11    0.00s  0.09s  0.01s w
[root@bogon ~]# 

    1)JCPU:以终端号区分,该终端所有相关的进程执行时,所消耗的CPU时间会显示在这里

    2)PCPU:CPU执行程序耗费的时间

    3)WHAT:用户正在执行的操作

    4)load average:分别显示系统在过去的1、5、15分钟内的平均负载程度

    5)FROM:显示用户从何处登录

    6)IDEL:用户闲置时间

    7)查看个别用户登录信息:w 用户名

  6、查看系统中的进程 ps

    常用选项:

    a:显示所有用户的进程

    u:显示用户名和启动时间

    x:显示没有控制终端的进程

    e:显示所有进程,包括没有控制终端的进程

    l:长格式显示

    w:宽行显示

    1)查看隶属于自己的进程

[root@bogon ~]# ps
  PID TTY          TIME CMD
 1581 pts/0    00:00:00 bash
 1606 pts/0    00:00:00 ps
[root@bogon ~]#

    2)查看隶属于自己进程的详细信息ps -u or -l  

[root@bogon ~]# ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1473  0.0  0.0   2004   484 tty2     Ss+  21:24   0:00 /sbin/mingetty
root      1475  0.0  0.0   2004   480 tty3     Ss+  21:24   0:00 /sbin/mingetty
root      1477  0.0  0.0   2004   480 tty4     Ss+  21:24   0:00 /sbin/mingetty
root      1479  0.0  0.0   2004   480 tty5     Ss+  21:24   0:00 /sbin/mingetty
root      1481  0.0  0.0   2004   508 tty6     Ss+  21:24   0:00 /sbin/mingetty
root      1552  0.0  0.1   8016  1652 tty1     Ss+  21:24   0:00 -bash
root      1581  0.0  0.1   6736  1612 pts/0    Ss   21:30   0:00 -bash
root      1607  2.0  0.1   6548  1040 pts/0    R+   21:33   0:00 ps -u
[root@bogon ~]#

    3)查看系统中指定进程信息

[root@bogon ~]# ps -le | grep sshd
5 S     0  1331     1  0  80   0 -  2131 -      ?        00:00:00 sshd
4 S     0  1579  1331  0  80   0 -  2903 -      ?        00:00:00 sshd
[root@bogon ~]#
[root@bogon ~]# ps -ef | grep sshd
root      1331     1  0 21:24 ?        00:00:00 /usr/sbin/sshd
root      1579  1331  0 21:30 ?        00:00:00 sshd: root@pts/0 
root      1624  1581  0 21:46 pts/0    00:00:00 grep sshd
[root@bogon ~]#

  7、kill—杀死进程

    1)关闭进程:kill 进程号

    2)kill -9 进程号(强行关闭)

    3)kill -l 进程号(重启进程)

    4)关闭图形程序 xkill

    5)结束所有进程 killall 进程名称

    6)查找服务进程号 pgrep 服务名称

    7)关闭进程:pkill 进程名称

  8、指定程序的运行优先级

    1)nice 指定程序的运行优先级

    格式:nice -n command

    例如:nice -5 myprogram

    2)renice 改变一个正在运行的进程的优先级

    格式:renice n pid

    例如:renice -5 777

    3)优先级取值范围(-20,19)

  9、nohup

    使进程在用户退出登录后仍旧继续执行,nohup命令将执行后的数据信息和错误信息默认存储到文件nohup.out中

    格式: nohup program &

[root@bogon ~]# nohup find /etc -name init* > /root/find.init.20121225 &

  10、进程的挂起和恢复

    1)进程的中止(挂起)和终止

      挂起:Ctrl+Z

      终止:Ctrl+C

    2)进程的恢复

      恢复到前台继续运行 fg

      恢复到后台继续运行 bg

    3)查看被挂起的进程 jobs

[root@bogon ~]# jobs
[1]+  Stopped                 find / -name inittab
[root@bogon ~]# 

    调到前台执行:fg 编号

[root@bogon ~]# fg 1
find / -name inittab
/etc/webmin/inittab
/etc/inittab
/backup/etc/inittab

    调到后台执行 bg 编号

[root@bogon ~]# bg 1

  11、top

    进程状态显示和进程控制,每5秒钟自动刷新一次(动态显示)

    常用选项:(在top执行后使用)

    d:指定刷新的时间间隔

    c:显示真个命令行而不仅仅显示命令名

    u:查看指定用户的进程

    k:终止执行中的进程

    h or ?:获得帮助

    r:重新设置进程优先级

    W:将当前设置写入~/.toprc文件中

 

二、计划任务

  1、计划任务的命令

    1)at  安排作业在某一时刻执行一次

      安排一个或多个命令在指定时间运行一次

      at的命令格式及参数:

      at [-f 文件名] 时间

      at命令指定时间的方式:

      绝对计时方法:

        midnight  noon  teatime

        hh:mm [today]

        hh:mm: tomorrow

        hh:mm 星期

        hh:mm MM/DD/YY

      相对计时方法:

        now + n minutes

        now + n hours

        now + n days

      指定在今天下午18:00执行某命令,假设现在时间是下午15:00,2013年1月2日

      命令格式如下:

      at 6:00pm

      at 18:00

      at 18:00 today

      at now + 3 hours

      at now + 180 minutes

      at 18:00 2.1.13

      at 18:00 1/2/13

      交互方式执行:比如在5分钟后把/etc/motd 中的内容广播出去

[root@localhost ~]# at now +5 minutes
at> /usr/bin/wall < /etc/motd
at> <EOT>
job 1 at 2013-01-01 21:01
[root@localhost ~]#

    输入完命令后,按Ctrl+d保存,时间一到,就会把内容广播出去了

    使用命令文件方式

    把要执行的命令写在脚本文件at.script中,然后使用下面的命令

[root@localhost ~]# at -f at.script 21:20 1/2/13
job 2 at 2013-01-02 21:20
[root@localhost ~]# 

    at -l or atq 查看队列中的任务

[root@localhost ~]# at -l
2       2013-01-02 21:20 a root
[root@localhost ~]# 

 

[root@localhost ~]# atq
2       2013-01-02 21:20 a root
[root@localhost ~]# 

    at -d or atrm 删除队列中的任务

[root@localhost ~]# at -d 2
[root@localhost ~]# 

    生成的计划任务存放在:/var/spool/at

      

    at 配置文件

    作用:限制哪些用户可以使用at命令

    /etc/at.allow

    /etc/at.deny

    2)batch  安排作业在系统负载不重时执行一次

      安排一个或者多个命令在系统负载较轻时执行一次(一般情况下负载较轻是指平均负载降到0.8以下)

      使用方法同at

    3)cron  安排周期性运行的作业

      用于生成cron进程所需要的crontab文件

      crontab的命令格式

      crontab {-l|-r|-e}

      -l  显示当前的crontab

      -r  删除当前的crontab

      -e  使用编辑器编辑当前的crontab文件

      crontab文件格式:

        分钟 小时 天 月 星期 命令/脚本

        minute hour day-of-month month-of-year day-of-week commands

  

        minute  一小时钟的哪一分钟[0~59]

        hour  一天中的哪个小时[0~23]

        day-of-month  一月中的哪一天[1~31]

        month-of-year  一年中的哪一月[1~12]

        day-of-week  一周中的哪一天[0~6]

        commands  执行的命令

        

                  分钟  小时  天  月  星期  命令/脚本

每天凌晨4点执行:          0   4     *    *  * 

每周二和周五下午6点执行:      0   18   *        *       2,5(逗号分隔不连续的值)

1月到3月每周二和周五下午6点执行:   0     18       *        1-3  2,5   (连续的值用-连接)

                  */2(每隔2分钟)       

      crontab文件建好以后可以到/var/spool/cron目录中确认