2011年12月25日星期日

《Classic Shell Scripting》:进程

1.进程可以被指定优先权,这么一来,有时间考虑的进程便能比不重要的进程先执行。nice与renice命令即用于调整进程的优先权。

2.在任何瞬间,等待执行之进程的平均数,被称为平均负载(load average),最简单的uptime命令便能显示:(显示开机至今的时间,用户数,及平均负载)
[xiayf@archlinux ~]$ uptime
16:42:46 up 20:53, 4 users, load average: 0.23, 0.13, 0.09
由于平均负载会一直变化,uptime会汇报三个平均时间估算值,分别为最后一分钟,五分钟以及十五分钟的估算值。

3.列出进程的命令中,最重要的便是进程状态(process status)命令:ps。长久以来,ps的形式发展出主要的两种:System V式与BSD式。如果要取得ps的冗长输出,则需要其他选项,在System V形式:
在BSD形式下,则为:
ps输出的顺序不保证有一定的规则,且由于进程的列表是持续地变动的,每次执行时都会看到不同的输出。

4.大部分情况下,Shell在处理下一个命令之前会等待一进程结束。不过只要在命令最后加上&字符,而非分号或换行符号,便能将进程放在后台中执行。

5.wait命令可用以等待某个特定进程完成,在不加任何参数的情况下,则为等待所有后台进程的完成。

6.kill其实是传送信号(signal)给指定的执行中程序(不过有两个例外)。进程接到信号,并处理之,有时可能直接选择忽略它们。只有进程的拥有者,或root,内核,进程本身,可以传送信号给它。但接收信号的进程本身无法判断信号从何而来。

7.ISO Standard C只定义六,七种信号类型,但POSIX增加了20多种,大部分系统还有更多,提供30至50种不同的信号。

8.以删除进程来说,必须要知道的有四个信号:ABRT(中断),HUP(搁置),KILL,与TERM(终结)。有些程序会在离开前做些清除工作:它们通常将TERM信号解释为"快速地清除并离开"的意思。如果你未指定信号,则kill会送出此信号。ABRT有点类似TERM,不过它会抑制清除的操作,并产生进程内存镜像的副本,将其置于核心,即program.core或core.PID中。HUP信号有点类似要求中止,但是对于很多的daemon来说,它时常表示进程应先停止现在正在做的事,然后准备处理新的工作,好像它被重新启动一样。

9.有两个信号是没有任何进程可捕捉或忽略的:KILL与STOP。STOP通常只是暂停进程,知道CONT的信号出现,要求它继续执行。KILL信号则是让进程立即中止。以惯例而言,你应该先送出HUP信号给进程,让进程有机会优雅地中止。如果它没有马上离开,再试试TERM信号。如果这么做还是无法离开,再使用最后手段KILL信号。

10.小心使用kill命令。当程序不正常中止时,可能会在文件系统里留下残余数据。这些数据本应删除,除了浪费空间外,可能还会导致下次执行程序时发生问题。

11.有些系统(GNU/Linux,NetBSD,与Sun Solaris)提供了pgrep与pkill命令,让你以名称追踪并删除进程。如未提供额外命令行选项,则pkill会传送一信号给"所有"指定名称的进程。

                                                                            
延迟的进程调度
1. sleep:延迟片刻 - 当进程应于某个特定时间过后才能启动时,可使用sleep命令暂停执行一段指定的秒数之后,再下达被延迟的命令。sleep使用的资源很少,且可在不会对活动中的进程有任何干扰下被使用。事实上,调度器只是忽略休眠中的进程,直到其计时器届满才叫醒它们。

2. at:延迟至特定时间 - at命令可以令程序在特定时间执行。该命令语法在系统间各异,不过下面的例子为普遍形式:
at 21:00               < command-file  #在下午9点执行
at now                 < command-file  #马上执行
at now + 10 minutes    < command-file  #10分钟后执行
at now + 8 hours       < command-file  #8小时后执行
at 0400 tomorrow       < command-file  #明天早上4点执行
at 14 July             < command-file  #在下一个国庆日(Bastille Day)执行
at noon + 15 minutes   < command-file  #在今天的12:15执行
at teatime             < command-file  #在今天下午执行
atq列出at队列里的所有工作,而atrm则是删除它们。

3. batch:为资源控制而延迟 - 批处理方式执行任务

4. crontab: 在指定时间执行 - 大部分计算机有许多管理工作需要重复执行,比如每晚的文件系统备份,每周的日志文件与暂时性目录的清空,每月的账目报表等等。

没有评论:

发表评论