新聞中心
在Linux操作系統(tǒng)中,進(jìn)程是相互獨(dú)立的執(zhí)行實(shí)體。在實(shí)際應(yīng)用中,進(jìn)程的執(zhí)行模式對(duì)于系統(tǒng)性能和資源利用率等方面有著重要的影響。本文將,涵蓋進(jìn)程創(chuàng)建、進(jìn)程調(diào)度、進(jìn)程通信以及進(jìn)程退出等方面。

一、進(jìn)程創(chuàng)建
在Linux系統(tǒng)中,進(jìn)程創(chuàng)建是由fork()函數(shù)實(shí)現(xiàn)的。該函數(shù)會(huì)在父進(jìn)程中創(chuàng)建一個(gè)與原進(jìn)程相似的子進(jìn)程,并在子進(jìn)程和父進(jìn)程創(chuàng)建出來(lái)后讓兩者同時(shí)運(yùn)行。下面是fork()函數(shù)的調(diào)用格式:
pid_t fork(void);
fork()函數(shù)的返回值為兩個(gè)不同的整數(shù)。在父進(jìn)程中,該返回值為子進(jìn)程的PID(進(jìn)程標(biāo)識(shí)符),而在子進(jìn)程中,該返回值為0。進(jìn)程的創(chuàng)建意味著進(jìn)程擁有了一份獨(dú)立的系統(tǒng)資源,包括CPU時(shí)間、內(nèi)存空間、文件句柄等。
二、進(jìn)程調(diào)度
在Linux中,進(jìn)程的調(diào)度是操作系統(tǒng)根據(jù)一定的規(guī)則將CPU時(shí)間分配給各個(gè)進(jìn)程的過(guò)程。由于Linux系統(tǒng)是支持多任務(wù)的操作系統(tǒng),因此進(jìn)程調(diào)度是系統(tǒng)中最基本的任務(wù)之一。Linux的進(jìn)程調(diào)度器采取了時(shí)間片輪轉(zhuǎn)的方式進(jìn)行調(diào)度,即每個(gè)進(jìn)程被分配一個(gè)時(shí)間片,當(dāng)時(shí)間片用完后就會(huì)被放回等待隊(duì)列中,等待下一輪調(diào)度執(zhí)行。系統(tǒng)中的進(jìn)程根據(jù)優(yōu)先級(jí)不同,獲得的時(shí)間片也是不同的。在Linux中,進(jìn)程的優(yōu)先級(jí)是由nice值來(lái)決定的,nice值越小,進(jìn)程的優(yōu)先級(jí)越高。
除此之外,Linux系統(tǒng)還引入了多種調(diào)度算法,如完全公平調(diào)度(CFS)算法、實(shí)時(shí)調(diào)度(RT)算法等。CFS算法是一種完全公平的調(diào)度算法,它試圖使所有運(yùn)行中的進(jìn)程獲得相同的時(shí)間片,實(shí)現(xiàn)公平調(diào)度。而實(shí)時(shí)調(diào)度算法則根據(jù)進(jìn)程所需要的實(shí)時(shí)性來(lái)進(jìn)行優(yōu)先級(jí)調(diào)度,優(yōu)化實(shí)時(shí)任務(wù)的響應(yīng)時(shí)間,提高系統(tǒng)的實(shí)時(shí)性能。
三、進(jìn)程通信
在Linux系統(tǒng)中,進(jìn)程之間是通過(guò)進(jìn)程通信機(jī)制來(lái)進(jìn)行相互溝通和交換信息的。常見的進(jìn)程通信機(jī)制有管道、消息隊(duì)列、共享內(nèi)存和信號(hào)量等。其中,管道機(jī)制是最簡(jiǎn)單的進(jìn)程通信方式,它是一種單向通信方式,只能在父子進(jìn)程之間建立。消息隊(duì)列是一種先進(jìn)先出的隊(duì)列,同樣有讀寫兩個(gè)方向。共享內(nèi)存則允許多個(gè)進(jìn)程共享同一塊內(nèi)存區(qū)域。信號(hào)量是一種用于進(jìn)程同步的機(jī)制,可以讓進(jìn)程之間互相協(xié)調(diào),避免出現(xiàn)資源競(jìng)爭(zhēng)的情況。
四、進(jìn)程退出
進(jìn)程退出是指進(jìn)程執(zhí)行完畢后終止的過(guò)程。在Linux中,進(jìn)程正常退出的方法是通過(guò)調(diào)用exit()函數(shù)實(shí)現(xiàn)的,該函數(shù)一般在mn()函數(shù)執(zhí)行結(jié)束后調(diào)用。進(jìn)程的異常退出則分為兩種情況:一種是進(jìn)程接收到了一個(gè)信號(hào)而被迫退出,另一種是進(jìn)程執(zhí)行過(guò)程中出現(xiàn)了錯(cuò)誤或者異常情況而被迫退出。
在進(jìn)程退出時(shí),操作系統(tǒng)會(huì)在進(jìn)程的PCB中記錄進(jìn)程的狀態(tài)信息,并將該進(jìn)程從進(jìn)程表中刪除,同時(shí)釋放該進(jìn)程占用的系統(tǒng)資源。此外,操作系統(tǒng)還會(huì)向父進(jìn)程發(fā)送一個(gè)SIGCHILD信號(hào),以通知父進(jìn)程子進(jìn)程已經(jīng)終止。
本文介紹了Linux系統(tǒng)中進(jìn)程的基本概念和執(zhí)行模式,包括進(jìn)程的創(chuàng)建、進(jìn)程調(diào)度、進(jìn)程通信以及進(jìn)程退出等方面。了解進(jìn)程的執(zhí)行模式對(duì)于理解Linux系統(tǒng)的工作原理和優(yōu)化系統(tǒng)性能有重要作用。在實(shí)際應(yīng)用中,合理地選擇進(jìn)程通信方式和優(yōu)化進(jìn)程調(diào)度算法也可以提高系統(tǒng)的運(yùn)行效率和響應(yīng)能力。
相關(guān)問(wèn)題拓展閱讀:
- Linux進(jìn)程管理及作業(yè)控制的啟動(dòng)進(jìn)程
Linux進(jìn)程管理及作業(yè)控制的啟動(dòng)進(jìn)程
鍵入需要運(yùn)行的程序的程序名,執(zhí)行一個(gè)程序,其實(shí)也就是啟動(dòng)了一個(gè)進(jìn)程。在Linux系統(tǒng)中每個(gè)進(jìn)程都具有一個(gè)進(jìn)程號(hào),用于系統(tǒng)識(shí)別和調(diào)度進(jìn)程。啟動(dòng)一個(gè)進(jìn)程有兩個(gè)主要途徑:手工啟動(dòng)和調(diào)度啟動(dòng),后者是事先進(jìn)行設(shè)置,根據(jù)用戶要求自行啟動(dòng)。 由用戶輸入命令,直接啟動(dòng)一個(gè)進(jìn)程便是手工啟動(dòng)進(jìn)程。但手工啟動(dòng)進(jìn)程又可以分為很多種,根據(jù)啟動(dòng)的進(jìn)程類型不同、性質(zhì)不同,實(shí)際結(jié)果也不一樣,下面分別介紹。
1. 前臺(tái)啟動(dòng)
這或許是手工啟動(dòng)一個(gè)進(jìn)程的最常用的方式。一般地,用戶鍵入一個(gè)命令“l(fā)s –l”或攜指,這就已經(jīng)啟動(dòng)了一個(gè)進(jìn)程,而且是一個(gè)前臺(tái)的進(jìn)程。這時(shí)候系統(tǒng)其實(shí)已經(jīng)處于一個(gè)多進(jìn)程狀態(tài)?;蛟S有些用戶會(huì)疑惑:我只啟動(dòng)了一個(gè)進(jìn)程而已。但實(shí)際上有許多運(yùn)行在后臺(tái)的、系統(tǒng)啟動(dòng)時(shí)就已經(jīng)自動(dòng)啟動(dòng)的進(jìn)程正在悄悄運(yùn)行著。還有的用戶在鍵入“l(fā)s –l”命令以后趕緊使用“ps –x”查看,卻沒有看到ls進(jìn)程,也覺得很奇怪。其實(shí)這是因?yàn)閘s這個(gè)進(jìn)程結(jié)束太快,使用ps查看時(shí)該進(jìn)程已經(jīng)執(zhí)行結(jié)束了。如果啟動(dòng)一個(gè)比較耗時(shí)的進(jìn)程:
find / -name fox.jpg
然后再把該進(jìn)程掛起,使用ps查看,就會(huì)看到一個(gè)find進(jìn)程在里面。
2. 后臺(tái)啟動(dòng)
直接從后臺(tái)手工啟動(dòng)一個(gè)進(jìn)程用得比較少一些,除非是該進(jìn)程甚為耗時(shí),且用戶也不急著需要結(jié)果的時(shí)候。假設(shè)用戶要啟動(dòng)一個(gè)需要長(zhǎng)時(shí)間運(yùn)行的格式化文本文件的進(jìn)程。為了不使整個(gè)shell在格式化過(guò)程中都處于“癱瘓”狀態(tài),從后臺(tái)啟動(dòng)這個(gè)進(jìn)程是明智的選擇。
$ troff –me notes > note_form &
4513
$
由上例可見,從后臺(tái)啟動(dòng)進(jìn)程其實(shí)就是在命令結(jié)尾加上一個(gè)&號(hào)。鍵入命令以后,出現(xiàn)一個(gè)數(shù)字,這個(gè)數(shù)字就是該進(jìn)程的編號(hào),也稱為PID,然后就出現(xiàn)了提示符。用戶可以繼續(xù)其他工作。
上面介紹了前、后臺(tái)啟動(dòng)的兩種情況。實(shí)際上這兩種啟動(dòng)方式有個(gè)共同的特點(diǎn),就是新進(jìn)程都是由當(dāng)前shell這個(gè)進(jìn)程產(chǎn)生的。也就是說(shuō),是shell創(chuàng)建了新進(jìn)程,于是就稱這種關(guān)系為進(jìn)程間的父子關(guān)系。這里shell是父進(jìn)程,而新進(jìn)程是子進(jìn)程。一個(gè)父進(jìn)程可以有多個(gè)子進(jìn)程,一般地,子進(jìn)程結(jié)束后才能繼續(xù)父進(jìn)程;當(dāng)然如果是從后臺(tái)啟動(dòng),那就不用等待子進(jìn)程結(jié)束了。
一種比較特殊的情況是在使用管道符的時(shí)候。例如:
nroff -man ps.1|grep kill|more
這時(shí)候?qū)嶋H上是同時(shí)啟動(dòng)了三個(gè)進(jìn)程。請(qǐng)注意是同時(shí)啟動(dòng)的,所有放在管道兩邊的進(jìn)程都將被同時(shí)啟動(dòng),它們都是當(dāng)前shell的子程序,互相之間可以稱為兄弟進(jìn)程。
以上介紹的是手工啟動(dòng)進(jìn)程的一些內(nèi)容,作為一名系統(tǒng)管理員,很多時(shí)候都需要把事情安排好以后讓其自動(dòng)運(yùn)行。因?yàn)楣芾韱T不是機(jī)器,也有離開的時(shí)候,所以有些必須要做的工作而恰好管理員不能親自操作,這時(shí)候就需要使用調(diào)度啟動(dòng)進(jìn)程了。 有時(shí)候需要對(duì)系統(tǒng)進(jìn)行一些比較費(fèi)時(shí)而且占用資源的維護(hù)工作,這些工作適合在深夜進(jìn)行,這時(shí)候用戶就可以事先進(jìn)行調(diào)度安排,指定任務(wù)運(yùn)行的時(shí)間或者場(chǎng)合,到時(shí)候系統(tǒng)會(huì)自動(dòng)完成這一切工作。
要使用自動(dòng)啟動(dòng)進(jìn)程的功能,就需要掌握以下幾個(gè)啟動(dòng)命令。
at命令
用戶使用at命令在指定時(shí)刻執(zhí)行指定的命令序列。也就是說(shuō),該命令至少需要指定一個(gè)命令、一個(gè)執(zhí)行時(shí)間才可以正常運(yùn)行。at命令可以只指定時(shí)間,也可以時(shí)間和日期一起指定。需要注意的是,指定時(shí)間有個(gè)系統(tǒng)判別問(wèn)題。比如說(shuō):用戶現(xiàn)在指定了一個(gè)執(zhí)行時(shí)間:凌晨3:20,而發(fā)出at命令的時(shí)間是頭天晚上的20:00,那么究竟是在哪一天執(zhí)行該命令呢?如果用戶在3:20以前仍然在工作,那么該命令將在這個(gè)時(shí)候完成;如果用戶3:20以前就退出了工作狀態(tài),那么該命令將在第二天凌晨才得到執(zhí)行。下面是at命令的語(yǔ)法格式:
at 時(shí)間
at -c 作業(yè)
at允許使用一套相當(dāng)復(fù)雜的指定時(shí)間的方法,實(shí)際上是將POSIX.2標(biāo)準(zhǔn)擴(kuò)展了。它可以接受在當(dāng)天的hh:mm(小時(shí):分鐘)式的時(shí)間指定。如果該時(shí)間已經(jīng)過(guò)去,那么就放在第二天執(zhí)行。當(dāng)然也可以使用midnight(深夜),noon(中午),teatime(飲茶時(shí)間,一般是下午4點(diǎn))等比較模衫配糊的詞語(yǔ)來(lái)指定時(shí)間。用戶還可以采用12小時(shí)計(jì)時(shí)制,即在時(shí)間后面加上AM(上午)或者PM(下午)來(lái)說(shuō)明是上午還是下午。
也可以指定命令執(zhí)行的具體隱和日期,指定格式為month day(月 日)或者mm/dd/yy(月/日/年)或者dd.mm.yy(日.月.年)。指定的日期必須跟在指定時(shí)間的后面。
上面介紹的都是絕對(duì)計(jì)時(shí)法,其實(shí)還可以使用相對(duì)計(jì)時(shí)法,這對(duì)于安排不久就要執(zhí)行的命令是很有好處的。指定格式為:now + count time-units ,now就是當(dāng)前時(shí)間,time-units是時(shí)間單位,這里可以是 minutes(分鐘)、hours(小時(shí))、days(天)、weeks(星期)。count是時(shí)間的數(shù)量,究竟是幾天,還是幾小時(shí),等等。
還有一種計(jì)時(shí)方法就是直接使用today(今天)、tomorrow(明天)來(lái)指定完成命令的時(shí)間。下面通過(guò)一些例子來(lái)說(shuō)明具體用法。
指定在今天下午5:30執(zhí)行某命令。假設(shè)現(xiàn)在時(shí)間是中午12:30,1999年2月24日,其命令格式如下:
at 5:30pm
at 17:30
at 17:30 today
at now + 5 hours
at now + 300 minutes
at 17:30 24.2.99
at 17:30 2/24/99
at 17:30 Feb 24
以上這些命令表達(dá)的意義是完全一樣的,所以在安排時(shí)間的時(shí)候完全可以根據(jù)個(gè)人喜好和具體情況自由選擇。一般采用絕對(duì)時(shí)間的24小時(shí)計(jì)時(shí)法可以避免由于用戶自己的疏忽造成計(jì)時(shí)錯(cuò)誤的情況發(fā)生,例如上例可以寫成:
at 17:30 2/24/99
這樣非常清楚,而且別人也看得懂。
對(duì)于at命令來(lái)說(shuō),需要定時(shí)執(zhí)行的命令是從標(biāo)準(zhǔn)輸入或者使用-f選項(xiàng)指定的文件中讀取并執(zhí)行的。如果at命令是從一個(gè)使用su命令切換到用戶shell中執(zhí)行的,那么當(dāng)前用戶被認(rèn)為是執(zhí)行用戶,所有的錯(cuò)誤和輸出結(jié)果都會(huì)送給這個(gè)用戶。但是如果有郵件送出的話,收到郵件的將是原來(lái)的用戶,也就是登錄時(shí)shell的所有者。
$ at -f work 4pm + 3 days
在三天后下午4點(diǎn)執(zhí)行文件work中的作業(yè)。
$ at -f work 10am Jul 31
在7月31日上午10點(diǎn)執(zhí)行文件work中的作業(yè)。
在任何情況下,超級(jí)用戶都可以使用這個(gè)命令。對(duì)于其他用戶來(lái)說(shuō),是否可以使用就取決于兩個(gè)文件:/etc/at.allow和/etc/at.deny。如果/etc/at.allow文件存在的話,那么只有在其中列出的用戶才可以使用at命令;如果該文件不存在,那么將檢查/etc/at.deny文件是否存在,在這個(gè)文件中列出的用戶均不能使用該命令。如果兩個(gè)文件都不存在,那么只有超級(jí)用戶可以使用該命令;空的/etc/at.deny文件意味著所有的用戶都可以使用該命令,這也是默認(rèn)狀態(tài)。
下面對(duì)命令中的參數(shù)進(jìn)行說(shuō)明。
-V 將標(biāo)準(zhǔn)版本號(hào)打印到標(biāo)準(zhǔn)錯(cuò)誤中。
-q queue 使用指定的隊(duì)列。隊(duì)列名稱是由單個(gè)字母組成,合法的隊(duì)列名可以由a-z或者A-Z。a隊(duì)列是at命令的默認(rèn)隊(duì)列。
-m 作業(yè)結(jié)束后發(fā)送郵件給執(zhí)行at命令的用戶。
-f file 使用該選項(xiàng)將使命令從指定的file讀取,而不是從標(biāo)準(zhǔn)輸入讀取。
-l atq命令的一個(gè)別名。該命令用于查看安排的作業(yè)序列,它將列出用戶排在隊(duì)列中的作業(yè),如果是超級(jí)用戶,則列出隊(duì)列中的所有工作。
命令的語(yǔ)法格式如下:
atq
-d atrm 命令的一個(gè)別名。該命令用于刪除指定要執(zhí)行的命令序列,語(yǔ)法格式如下:
atrm 作業(yè)
-c 將命令行上所列的作業(yè)送到標(biāo)準(zhǔn)輸出。
找出系統(tǒng)中所有以txt為后綴名的文件,并且進(jìn)行打印。打印結(jié)束后給用戶foxy發(fā)出郵件通知取件。指定時(shí)間為十二月二十五日凌晨?jī)牲c(diǎn)。
首先鍵入:
$ at 2:00 12/25/99
然后系統(tǒng)出現(xiàn)at>提示符,等待用戶輸入進(jìn)一步的信息,也就是需要執(zhí)行的命令序列:
at> find / -name “*.txt”|lpr
at> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy
輸入完每一行指令然后回車,所有指令序列輸入完畢后,使用組合鍵結(jié)束at命令的輸入。這時(shí)候屏幕將出現(xiàn)如下信息:
warning:command will be executed using /bin/sh.
job 1 at:00
提醒用戶將使用哪個(gè)shell來(lái)執(zhí)行該命令序列。 實(shí)際上如果命令序列較長(zhǎng)或者經(jīng)常被執(zhí)行的時(shí)候,一般都采用將該序列寫到一個(gè)文件中,然后將文件作為at命令的輸入來(lái)處理。這樣不容易出錯(cuò)。
例5> 上面的例子可以修改如下:
將命令序列寫入到文件/tmp/printjob,語(yǔ)句為:
$ at -f /tmp/printjob 2:00 12/25/99
這樣一來(lái),at命令將使用文件中的命令序列,屏幕顯示如下:
Warning:command will be executed using /bin/sh.
job 2 at:00
當(dāng)然也可以采用以下命令:
$ at find / -name *.txt|lpr
at> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy
現(xiàn)在這個(gè)命令就會(huì)在合適的時(shí)間進(jìn)行了,進(jìn)行完后會(huì)發(fā)回一個(gè)信息。
仍然使用組合鍵來(lái)結(jié)束命令輸入。而且batch和at命令都將自動(dòng)轉(zhuǎn)入后臺(tái),所以啟動(dòng)的時(shí)候也不需要加上&符號(hào)。
cron命令
前面介紹的兩條命令都會(huì)在一定時(shí)間內(nèi)完成一定任務(wù),但是要注意它們都只能執(zhí)行一次。也就是說(shuō),當(dāng)指定了運(yùn)行命令后,系統(tǒng)在指定時(shí)間完成任務(wù),一切就結(jié)束了。但是在很多時(shí)候需要不斷重復(fù)一些命令,比如:某公司每周一自動(dòng)向員工報(bào)告頭一周公司的活動(dòng)情況,這時(shí)候就需要使用cron命令來(lái)完成任務(wù)了。
實(shí)際上,cron命令是不應(yīng)該手工啟動(dòng)的。cron命令在系統(tǒng)啟動(dòng)時(shí)就由一個(gè)shell腳本自動(dòng)啟動(dòng),進(jìn)入后臺(tái)(所以不需要使用&符號(hào))。一般的用戶沒有運(yùn)行該命令的權(quán)限,雖然超級(jí)用戶可以手工啟動(dòng)cron,不過(guò)還是建議將其放到shell腳本中由系統(tǒng)自行啟動(dòng)。
首先cron命令會(huì)搜索/var/spool/cron目錄,尋找以/etc/passwd文件中的用戶名命名的crontab文件,被找到的這種文件將載入內(nèi)存。例如一個(gè)用戶名為foxy的用戶,它所對(duì)應(yīng)的crontab文件就應(yīng)該是/var/spool/cron/foxy。也就是說(shuō),以該用戶命名的crontab文件存放在/var/spool/cron目錄下面。cron命令還將搜索/etc/crontab文件,這個(gè)文件是用不同的格式寫成的。
cron啟動(dòng)以后,它將首先檢查是否有用戶設(shè)置了crontab文件,如果沒有就轉(zhuǎn)入“休眠”狀態(tài),釋放系統(tǒng)資源。所以該后臺(tái)進(jìn)程占用資源極少。它每分鐘“醒”過(guò)來(lái)一次,查看當(dāng)前是否有需要運(yùn)行的命令。命令執(zhí)行結(jié)束后,任何輸出都將作為郵件發(fā)送給crontab的所有者,或者是/etc/crontab文件中MAILTO環(huán)境變量中指定的用戶。
上面簡(jiǎn)單介紹了一些cron的工作原理,但是cron命令的執(zhí)行不需要用戶干涉;需要用戶修改的是crontab中要執(zhí)行的命令序列,所以下面介紹crontab命令。
crontab命令
crontab命令用于安裝、刪除或者列出用于驅(qū)動(dòng)cron后臺(tái)進(jìn)程的表格。也就是說(shuō),用戶把需要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行。每個(gè)用戶都可以有自己的crontab文件。下面就來(lái)看看如何創(chuàng)建一個(gè)crontab文件。
在/var/spool/cron下的crontab文件不可以直接創(chuàng)建或者直接修改。crontab文件是通過(guò)crontab命令得到的?,F(xiàn)在假設(shè)有個(gè)用戶名為foxy,需要?jiǎng)?chuàng)建自己的一個(gè)crontab文件。首先可以使用任何文本編輯器建立一個(gè)新文件,然后向其中寫入需要運(yùn)行的命令和要定期執(zhí)行的時(shí)間。
然后存盤退出。假設(shè)該文件為/tmp/test.cron。再后就是使用crontab命令來(lái)安裝這個(gè)文件,使之成為該用戶的crontab文件。鍵入:
crontab test.cron
這樣一個(gè)crontab 文件就建立好了??梢赞D(zhuǎn)到/var/spool/cron目錄下面查看,發(fā)現(xiàn)多了一個(gè)foxy文件。這個(gè)文件就是所需的crontab 文件。用more命令查看該文件的內(nèi)容可以發(fā)現(xiàn)文件頭有三行信息:
#DO NOT EDIT THIS FILE -edit the master and reinstall.
#(test.cron installed on Mon Feb 22 14:20:)
#(cron version –$Id:crontab.c,v 2./01/17 03:20:37 vivie Exp $)
大概意思是:
#切勿編輯此文件——如果需要改變請(qǐng)編輯源文件然后重新安裝。
#test.cron文件安裝時(shí)間:14:20:20 02/22/1999
如果需要改變其中的命令內(nèi)容時(shí),還是需要重新編輯原來(lái)的文件,然后再使用crontab命令安裝。
可以使用crontab命令的用戶是有限制的。如果/etc/cron.allow文件存在,那么只有其中列出的用戶才能使用該命令;如果該文件不存在但cron.deny文件存在,那么只有未列在該文件中的用戶才能使用crontab命令;如果兩個(gè)文件都不存在,那就取決于一些參數(shù)的設(shè)置,可能是只允許超級(jí)用戶使用該命令,也可能是所有用戶都可以使用該命令。
crontab命令的語(yǔ)法格式如下:
crontab file
crontab {-l|-r|-e}
之一種格式用于安裝一個(gè)新的crontab 文件,安裝來(lái)源就是file所指的文件,如果使用“-”符號(hào)作為文件名,那就意味著使用標(biāo)準(zhǔn)輸入作為安裝來(lái)源。
-u 如果使用該選項(xiàng),也就是指定了是哪個(gè)具體用戶的crontab 文件將被修改。如果不指定該選項(xiàng),crontab 將默認(rèn)是操作者本人的crontab ,也就是執(zhí)行該crontab 命令的用戶的crontab 文件將被修改。但是請(qǐng)注意,如果使用了su命令再使用crontab 命令很可能就會(huì)出現(xiàn)混亂的情況。所以如果是使用了su命令,更好使用-u選項(xiàng)來(lái)指定究竟是哪個(gè)用戶的crontab文件。
-l 在標(biāo)準(zhǔn)輸出上顯示當(dāng)前的crontab。
-r 刪除當(dāng)前的crontab文件。
-e 使用VISUAL或者EDITOR環(huán)境變量所指的編輯器編輯當(dāng)前的crontab文件。當(dāng)結(jié)束編輯離開時(shí),編輯后的文件將自動(dòng)安裝。
# crontab -l #列出用戶目前的crontab。
10 6 * * * date
0 */2 * * * date
0 23-7/2,8 * * * date
#
在crontab文件中如何輸入需要執(zhí)行的命令和時(shí)間。該文件中每行都包括六個(gè)域,其中前五個(gè)域是指定命令被執(zhí)行的時(shí)間,最后一個(gè)域是要被執(zhí)行的命令。每個(gè)域之間使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
之一項(xiàng)是分鐘,第二項(xiàng)是小時(shí),第三項(xiàng)是一個(gè)月的第幾天,第四項(xiàng)是一年的第幾個(gè)月,第五項(xiàng)是一周的星期幾,第六項(xiàng)是要執(zhí)行的命令。這些項(xiàng)都不能為空,必須填入。如果用戶不需要指定其中的幾項(xiàng),那么可以使用*代替。因?yàn)?是統(tǒng)配符,可以代替任何字符,所以就可以認(rèn)為是任何時(shí)間,也就是該項(xiàng)被忽略了。在表4-1中給出了每項(xiàng)的合法范圍。
表4-1 指定時(shí)間的合法范圍
時(shí)間
合法值
minute 00-59
hour 00-23,其中00點(diǎn)就是晚上12點(diǎn)
day-of-month
01-31
month-of-year
01-12
day-of-week
0-6,其中周日是0
這樣用戶就可以往crontab 文件中寫入無(wú)限多的行以完成無(wú)限多的命令。命令域中可以寫入所有可以在命令行寫入的命令和符號(hào),其他所有時(shí)間域都支持列舉,也就是域中可以寫入很多的時(shí)間值,只要滿足這些時(shí)間值中的任何一個(gè)都執(zhí)行命令,每?jī)蓚€(gè)時(shí)間值中間使用逗號(hào)分隔。
5,15,25,35,45,55 16,17,18 * * * command
這就是表示任意天任意月,其實(shí)就是每天的下午4點(diǎn)、5點(diǎn)、6點(diǎn)的5 min、15 min、25 min、35 min、45 min、55 min時(shí)執(zhí)行命令。
在每周一,三,五的下午3:00系統(tǒng)進(jìn)入維護(hù)狀態(tài),重新啟動(dòng)系統(tǒng)。那么在crontab 文件中就應(yīng)該寫入如下字段:
00 15 * * 1,3,5 shutdown -r +5
然后將該文件存盤為foxy.cron,再鍵入crontab foxy.cron安裝該文件。
每小時(shí)的10分,40分執(zhí)行用戶目錄下的innd/bbslin這個(gè)指令:
10,40 * * * * innd/bbslink
每小時(shí)的1分執(zhí)行用戶目錄下的bin/account這個(gè)指令:
1 * * * * bin/account
每天早晨三點(diǎn)二十分執(zhí)行用戶目錄下如下所示的兩個(gè)指令(每個(gè)指令以;分隔):
20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st)
每年的一月和四月,4號(hào)到9號(hào)的3點(diǎn)12分和3點(diǎn)55分執(zhí)行/bin/rm -f expire.1st這個(gè)指令,并把結(jié)果添加在mm.txt這個(gè)文件之后(mm.txt文件位于用戶自己的目錄位置)。
12,,4 * /bin/rm -f expire.1st>> m.txt
我們來(lái)看一個(gè)超級(jí)用戶的crontab文件:
#Run the ‘a(chǎn)trun’ program every minutes
#This runs anything that’s due to run from ‘a(chǎn)t’.See man ‘a(chǎn)t’ or ‘a(chǎn)trun’. 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
40 7 * * * updatedb
8,10,22,30,39,46,54,58 * * * * /bin/sync
進(jìn)程的掛起及恢復(fù)命令bg、fg
作業(yè)控制允許將進(jìn)程掛起并可以在需要時(shí)恢復(fù)進(jìn)程的運(yùn)行,被掛起的作業(yè)恢復(fù)后將從中止處開始繼續(xù)運(yùn)行。只要在鍵盤上按,即可掛起當(dāng)前的前臺(tái)作業(yè)。
$ cat >
text.file + stopped cat > text.file
$ jobs + stopped cat >text.file
在鍵盤上按后,將掛起當(dāng)前執(zhí)行的命令cat。使用jobs命令可以顯示shell的作業(yè)清單,包括具體的作業(yè)、作業(yè)號(hào)以及作業(yè)當(dāng)前所處的狀態(tài)。
恢復(fù)進(jìn)程執(zhí)行時(shí),有兩種選擇:用fg命令將掛起的作業(yè)放回到前臺(tái)執(zhí)行;用bg命令將掛起的作業(yè)放到后臺(tái)執(zhí)行。
用戶正在使用Emacs,突然需要查看系統(tǒng)進(jìn)程情況。就首先使用組合鍵將Emacs進(jìn)程掛起,然后使用bg命令將其在后臺(tái)啟動(dòng),這樣就得到了前臺(tái)的操作控制權(quán),接著鍵入“ps –x”查看進(jìn)程情況。查看完畢后,使用fg命令將Emacs帶回前臺(tái)運(yùn)行即可。其命令格式為:
$ bg emacs
$ ps –x
$ fg emacs
默認(rèn)情況下,fg和bg命令對(duì)最近停止的作業(yè)進(jìn)行操作。如果希望恢復(fù)其他作業(yè)的運(yùn)行,可以在命令中指定要恢復(fù)作業(yè)的作業(yè)號(hào)來(lái)恢復(fù)該作業(yè)。例如:
$ fg 1
cat > text.file
linux進(jìn)程執(zhí)行模式的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux進(jìn)程執(zhí)行模式,深入探究Linux進(jìn)程執(zhí)行模式,Linux進(jìn)程管理及作業(yè)控制的啟動(dòng)進(jìn)程的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
本文名稱:深入探究Linux進(jìn)程執(zhí)行模式(linux進(jìn)程執(zhí)行模式)
路徑分享:http://m.5511xx.com/article/cdopdoe.html


咨詢
建站咨詢
