![Linux教學(xué)課件第6章_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/4c9162a8-35be-4c13-b5da-548c6de803b2/4c9162a8-35be-4c13-b5da-548c6de803b21.gif)
![Linux教學(xué)課件第6章_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/4c9162a8-35be-4c13-b5da-548c6de803b2/4c9162a8-35be-4c13-b5da-548c6de803b22.gif)
![Linux教學(xué)課件第6章_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/4c9162a8-35be-4c13-b5da-548c6de803b2/4c9162a8-35be-4c13-b5da-548c6de803b23.gif)
![Linux教學(xué)課件第6章_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/4c9162a8-35be-4c13-b5da-548c6de803b2/4c9162a8-35be-4c13-b5da-548c6de803b24.gif)
![Linux教學(xué)課件第6章_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/4c9162a8-35be-4c13-b5da-548c6de803b2/4c9162a8-35be-4c13-b5da-548c6de803b25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第 6 章章進程控制進程控制2本章重點 q 進程的基本概念及進程的結(jié)構(gòu)q Linux環(huán)境下進程的相關(guān)函數(shù)的應(yīng)用q 守護進程的概念、啟動和建立q 進程控制程序的編寫36.1 進程簡介進程簡介q進程是一個程序的一次執(zhí)行的過程。q在Linux環(huán)境下,每個正在運行的程序都稱為進程。q每個進程包含進程標識符及數(shù)據(jù),這些數(shù)據(jù)包含進程變量、外部變量及進程堆棧等。1. 進程與程序進程與程序q 由于一個進程對應(yīng)一個程序的執(zhí)行,但進程不等同于程序。因為程序是靜態(tài)的概念,進程是動態(tài)的概念。q 進程是程序執(zhí)行的過程,包括了動態(tài)創(chuàng)建、調(diào)度和消亡的整個過程。進程是程序執(zhí)行和資源管理的最小單位。q 對系統(tǒng)而言,當用戶在各
2、級系統(tǒng)中鍵入命令執(zhí)行一個程序的時候,它將啟動一個進程,因此,一個程序可以對應(yīng)多個進程。 46.1 進程簡介進程簡介2. Linux環(huán)境下的進程管理環(huán)境下的進程管理q Linux環(huán)境下的進程管理包括啟動進程和調(diào)度進程。q 啟動進程有兩種主要途徑:手工啟動和調(diào)度啟動。(1)手工啟動又可分為前臺啟動和后臺啟動。q 前臺啟動:是手工啟動一個進程的最常用方式。一般地,當用戶輸入一個命令時,就已經(jīng)啟動了一個進程,并且是一個前臺的進程。q 后臺啟動:往往是在該進程非常耗時,且用戶也不急著需要結(jié)果的時候啟動。一般地,當用戶輸入一個命令結(jié)尾加上一個“&”號,就是后臺啟動一個進程。56.1 進程簡介進程簡
3、介(2)調(diào)度啟動q 有時系統(tǒng)需要進行一些比較費時而且占用資源的維護工作,并且這些工作適合在深夜無人職守的時候進行,這時用戶就可以事先進行調(diào)度安排,指定任務(wù)運行的時間或者場合,到時候系統(tǒng)就會自動完成這一切工作。66.1 進程簡介進程簡介q調(diào)度進程包括對進程的中斷操作、改變優(yōu)先級、查看進程狀態(tài)等。qLinux環(huán)境下常見的進程調(diào)用命令 76.2 Liunx進程控制進程控制q Linux環(huán)境下在進程啟動時,系統(tǒng)會分配一個唯一的數(shù)值給每個進程,這個數(shù)值就稱為進程標識符。q 在Linux中最主要的進程標識有進程號(PID)和它的父進程號(PPID)。q PID惟一地標識一個進程。q PID和PPID都是非
4、零的正整數(shù)。 在Linux中獲得當前進程的PID和PPID的系統(tǒng)調(diào)用函數(shù)為getpid和getppid函數(shù)。86.2 Liunx進程控制進程控制q例例6-1:設(shè)計一個程序,要求顯示Linux系統(tǒng)分配給此程序的進程號(PID)和它的父進程號(PPID)。q源程序代碼:多次運行例多次運行例6.1的程序,每一次運行的的程序,每一次運行的結(jié)果結(jié)果PID值都是不一樣的,所以說值都是不一樣的,所以說PID是惟一地標識一個進程。是惟一地標識一個進程。96.2 Liunx進程控制進程控制qgetpid函數(shù)說明 qgetppid函數(shù)說明 106.2.1 進程的相關(guān)函數(shù)進程的相關(guān)函數(shù)q Linux c與進程相關(guān)的
5、主要函數(shù) 116.2.2 進程創(chuàng)建進程創(chuàng)建1. exec函數(shù)函數(shù)q例例6-2:設(shè)計一個程序,程序在運行時,能執(zhí)行vim程序,即創(chuàng)建一個新的進程,并用ps命令查看程序的進程號與vim的進程號。q源程序代碼:126.2.2 進程創(chuàng)建進程創(chuàng)建q 編譯、運行程序,系統(tǒng)會出現(xiàn)運行結(jié)果,先顯示Linux系統(tǒng)分配的進程號(PID),接著運行vim程序,創(chuàng)建新的進程。q 再打開一個終端,用ps查看原進程和新創(chuàng)建進程的進程號(PID)。q 可以看到,在新進程創(chuàng)建后,原來的進程已經(jīng)終止了。q 在用execve函數(shù)創(chuàng)建新進程后,會以新的程序取代原來的進程,然后系統(tǒng)會從新進程運行,但是新進程的PID值會與原來進程的P
6、ID值相同。一般情況下,在運行execve函數(shù)后是不會返回原進程的,只有在錯誤時才會返回-1,所以在原進程中的execve函數(shù)下方,加入perror函數(shù),輸出錯誤信息,并返回1,表示有錯誤發(fā)生。 注意:在使用注意:在使用exec族時,一定要加上錯誤判斷語句,族時,一定要加上錯誤判斷語句,因為因為exec很容易執(zhí)行失敗。很容易執(zhí)行失敗。136.2.2 進程創(chuàng)建進程創(chuàng)建q實際上,在Linux中并沒有exec函數(shù),而是有6個以exec開頭的函數(shù)族。qexec函數(shù)族的6個成員函數(shù)的語法 事實上,這事實上,這6個函數(shù)中真正的系個函數(shù)中真正的系統(tǒng)調(diào)用只有統(tǒng)調(diào)用只有execve,其他,其他5個都個都是庫函數(shù)
7、,它們最終都會調(diào)用是庫函數(shù),它們最終都會調(diào)用execve這個系統(tǒng)調(diào)用。這個系統(tǒng)調(diào)用。146.2.2 進程創(chuàng)建進程創(chuàng)建q 思考題1:execv函數(shù)的應(yīng)用,要在程序中執(zhí)行命令:ps -ef,命令ps在/bin目錄下。在這一函數(shù)中,參數(shù)v表示參數(shù)傳遞(含命令)為構(gòu)造指針數(shù)組方式:char *arg=ps,-ef,NULL;函數(shù)的使用為:execv(/bin/ps,arg);參考程序:#include /*文件預(yù)處理,包含標準輸入輸出庫*/#include /*文件預(yù)處理,包含getpid、getppid函數(shù)庫*/int main () /*C程序的主函數(shù),開始入口*/ char *arg=ls,-a
8、l,NULL; execv(/bin/ls,arg); return 1;156.2.2 進程創(chuàng)建進程創(chuàng)建q 思考題2:execlp 函數(shù)的應(yīng)用,要在程序中執(zhí)行命令:ps -ef,命令ps在/bin目錄下。在這一函數(shù)中,參數(shù)l表示命令或參數(shù)逐個列舉,參數(shù)p為文件查找方式(不需要給出路徑)。因而此函數(shù)的調(diào)用形式為:execlp(ps,ps,-ef,NULL); 請編寫一程序進行調(diào)試。q 思考題3:execl 函數(shù)的應(yīng)用,要在程序中執(zhí)行命令:ps -ef,命令ps在/bin目錄下。在這一函數(shù)中,參數(shù)l表示命令或參數(shù)逐個列舉,文件需給定路徑。因而此函數(shù)的調(diào)用形式為:execl(/bin/ps,ps,
9、-ef,NULL);請編寫一程序進行調(diào)試。166.2.2 進程創(chuàng)建進程創(chuàng)建2. system函數(shù)函數(shù)qsystem函數(shù)是一個和操作系統(tǒng)緊密相關(guān)的函數(shù)。用戶可以使用它在自己的程序中調(diào)用系統(tǒng)提供的各種命令。q使用時不需要預(yù)處理頭文件“unistd.h”。q例例6-3:設(shè)計一個程序,要求測試到LUPA社區(qū)的網(wǎng)絡(luò)連通狀況。 q編輯源程序代碼:176.2.2 進程創(chuàng)建進程創(chuàng)建q編譯、運行程序,系統(tǒng)會出現(xiàn)運行結(jié)果,先顯示Linux系統(tǒng)分配的進程號(PID),接著運行ping程序,創(chuàng)建新的進程 。q再打開一個終端,用ps查看原進程和新創(chuàng)建進程的進程號(PID) 。q可以看到,原來6-3的進程 (PID)值和
10、新進程的父進程號(PPID)值相同,在新進程創(chuàng)建后,原來的進程并沒有終止。注意:在第二個終端的時候,第一個終端中的注意:在第二個終端的時候,第一個終端中的ping不不能結(jié)束。能結(jié)束。186.2.2 進程創(chuàng)建進程創(chuàng)建qsystem函數(shù)說明思考題:如何使用前面的思考題:如何使用前面的exec函數(shù)族中的函數(shù),調(diào)用此例函數(shù)族中的函數(shù),調(diào)用此例中的系統(tǒng)命令中的系統(tǒng)命令“ping ”?196.2.2 進程創(chuàng)建進程創(chuàng)建3. fork函數(shù)函數(shù)q使用fork函數(shù)創(chuàng)建進程時,新的進程叫子進程,原來調(diào)用fork函數(shù)的進程則稱為父進程。q子進程會復(fù)制父進程的數(shù)據(jù)和堆棧空間,并繼承父進程的用戶代碼、組代碼、環(huán)境變量、已
11、經(jīng)打開的文件代碼、工作目錄及資源限制等,但是子進程和父進程使用不同的內(nèi)存空間。206.2.2 進程創(chuàng)建進程創(chuàng)建q例例6-4:設(shè)計一個程序,要求先顯示當前目錄下的文件信息,然后測試到LUPA社區(qū)的網(wǎng)絡(luò)連通狀況。q 編輯源程序代碼216.2.2 進程創(chuàng)建進程創(chuàng)建q編譯、運行程序,觀察結(jié)果。q可以看到,使用fork函數(shù)創(chuàng)建了一個子進程,子進程的返回值是0,父進程的返回值是子進程的進程號(PID) 。而子進程的父進程號(PPID)和父進程的進程號(PID)相同。q可見,子進程由父進程派生出來。注意:注意:fork函數(shù)使用一次就創(chuàng)建一個進程,所以若把函數(shù)使用一次就創(chuàng)建一個進程,所以若把fork函數(shù)放在函
12、數(shù)放在if else判斷語句或判斷語句或for循環(huán)語句中則要小心,不循環(huán)語句中則要小心,不能多次使用能多次使用fork函數(shù)。函數(shù)。如:如: void main() for(;)fork(); 226.2.2 進程創(chuàng)建進程創(chuàng)建qsleep函數(shù)說明qfork函數(shù)說明236.2.2 進程創(chuàng)建進程創(chuàng)建q思考題:此例中,為什么用sleep等待10秒鐘?q思考題:設(shè)計一個程序,在子進程中調(diào)用函數(shù)execl(/bin/ps,ps,-ef,NULL),而在父進程中調(diào)用函數(shù)execle(/bin/env,env,NULL,envp),其中有定義:char *envp=PATH=/tmp,USER=liu,NUL
13、L;請編寫并進行調(diào)試。246.2.3 進程終止進程終止q濫用fork函數(shù)會占滿系統(tǒng)進程,而且子進程與父進程使用不同的內(nèi)存空間,不斷產(chǎn)生子進程,也可能讓系統(tǒng)資源消耗殆盡。qLinux環(huán)境下c終止進程主要用exit和_exit函數(shù)。 q例例6-5:設(shè)計一個程序,要求子進程和父進程都在顯示輸出一些文字后分別用exit和_exit函數(shù)終止進程。q編輯源程序代碼:觀察結(jié)果可以看出,調(diào)觀察結(jié)果可以看出,調(diào)用用exit函數(shù)時,緩沖區(qū)函數(shù)時,緩沖區(qū)中的記錄能正常輸出;中的記錄能正常輸出;而調(diào)用而調(diào)用_exit時,緩沖區(qū)時,緩沖區(qū)中的記錄無法輸出。中的記錄無法輸出。256.2.3 進程終止進程終止q_exit(
14、)函數(shù)作用:直接使進程停止運行,清除其使用的內(nèi)存空間,并清除其在內(nèi)核中的各種數(shù)據(jù)結(jié)構(gòu);qexit()函數(shù)則在執(zhí)行退出之前加了若干道工序,exit函數(shù)在調(diào)用exit系統(tǒng)之前要查看文件的打開情況,把文件緩沖區(qū)中的內(nèi)容寫回文件。266.2.3 進程終止進程終止qexit函數(shù)說明q_exit函數(shù)說明276.2.4 僵尸進程僵尸進程q 一個僵尸進程(zombie),是指已終止運行,但尚末被清除的進程,又稱為過渡進程。q 當使用fork函數(shù)創(chuàng)建子進程時,由于子進程有可能比父進程晚終止,父進程終止后,子進程還沒終止,子進程就成了僵尸進程。為避免這種情況,可以在父進程中調(diào)用wait或waitpid函數(shù)。q w
15、ait函數(shù)是用于使父進程阻塞,直到一個子進程終止或者該進程接到了一個指定的信號為止。q waitpid的作用和wait一樣,但它并不一定要等待第一個終止的子進程,它還有若干選項,也能支持作業(yè)控制。q 實際上wait函數(shù)只是waitpid函數(shù)的一個特例,在Linux內(nèi)部實現(xiàn)wait函數(shù)時直接調(diào)用的就是waitpid函數(shù)。286.2.4 僵尸進程僵尸進程q例例6-6:設(shè)計一個程序,要求復(fù)制進程,子進程顯示自己的進程號(PID)后暫停一段時間,父進程等待子進程正常結(jié)束,打印顯示等待的進程號(PID)和等待的進程退出狀態(tài)。q流程圖:296.2.4 僵尸進程僵尸進程q編輯源程序代碼: 此例中的子進程運行
16、時間,明顯此例中的子進程運行時間,明顯比父進程時間長。為了避免子進比父進程時間長。為了避免子進程成為僵尸進程,父進程調(diào)用程成為僵尸進程,父進程調(diào)用wait,阻塞父進程的運行,等待,阻塞父進程的運行,等待子進程正常結(jié)束,父進程才繼續(xù)子進程正常結(jié)束,父進程才繼續(xù)運行,直到正常結(jié)束。運行,直到正常結(jié)束。306.2.4 僵尸進程僵尸進程qwait函數(shù)說明316.2.4 僵尸進程僵尸進程q例例6-7:設(shè)計一個程序,要求用戶可以選擇是否復(fù)制進程,子進程模仿思科(Cisco)1912交換機的開機界面,以命令行的方式讓用戶選擇進入,父進程判斷子進程是否正常終止。 q流程圖:326.2.4 僵尸進程僵尸進程q編
17、輯源程序代碼: 336.2.4 僵尸進程僵尸進程q 編譯、運行程序,提示是否復(fù)制進程,先選擇“2.不復(fù)制進程”,此時沒有產(chǎn)生子進程,返回值為“0” 。q 再次運行程序后,選擇再次運行程序后,選擇“1.復(fù)制進程復(fù)制進程”,此時產(chǎn)生子進,此時產(chǎn)生子進程,子進程的功能是模擬交換機的開機界面,提示選擇程,子進程的功能是模擬交換機的開機界面,提示選擇畫面,這兒選擇畫面,這兒選擇0,進入子程序,進入子程序display0,等待子程序,等待子程序運行終止后,返回值為運行終止后,返回值為“1”,父進程才終止。,父進程才終止。 q 修改程序:不用waitpid函數(shù)。q 再次運行程序后,選擇“1.復(fù)制進程”,這時
18、候父進程沒有等待子進程,也就是在模擬顯示完交換機的開機界面后,根本沒來得及輸入選擇,父進程就終止了,子進程就變成了僵尸進程。此例可以看出,在沒有語法、語義等錯此例可以看出,在沒有語法、語義等錯誤的情況下,程序還是沒有完成設(shè)計要誤的情況下,程序還是沒有完成設(shè)計要求??梢?,在多進程程序設(shè)計時,除了求??梢姡诙噙M程程序設(shè)計時,除了養(yǎng)成使用完后就終止的良好習慣,還要養(yǎng)成使用完后就終止的良好習慣,還要讓子進程工作完成后再終止,這個時候讓子進程工作完成后再終止,這個時候父進程就得靈活使用父進程就得靈活使用wait函數(shù)和函數(shù)和waitpid函數(shù)。函數(shù)。346.2.4 僵尸進程僵尸進程qwaitpid函數(shù)說
19、明356.3 Linux守護進程守護進程q守護進程(Daemon)是運行在后臺的一種特殊進程。q守護進程獨立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。q守護進程是一種很有用的進程。Linux的大多數(shù)服務(wù)器就是用守護進程實現(xiàn)的。q同時,守護進程完成許多系統(tǒng)任務(wù)。366.3.1 守護進程及其特性守護進程及其特性q守護進程最重要的特性是后臺運行。q其次,守護進程必須與其運行前的環(huán)境隔離開來。這些環(huán)境包括未關(guān)閉的文件描述符,控制終端,會話和進程組,工作目錄以及文件創(chuàng)建掩碼等。這些環(huán)境通常是守護進程從執(zhí)行它的父進程(特別是shell)中繼承下來的。q最后,守護進程的啟動方式有其特殊之處
20、。它可以在Linux系統(tǒng)啟動時從啟動腳本/etc/rc.d中啟動,也可以由作業(yè)規(guī)劃進程crond啟動,還可以由用戶終端(通常是shell)執(zhí)行。 376.3.1 守護進程及其特性守護進程及其特性q通過ps aux命令可查看Linux環(huán)境下的守護進程:qInit系統(tǒng)守護進程:它是進程1,負責啟動各運行層次特定的系統(tǒng)服務(wù)。qKeventd守護進程:為在內(nèi)核中運行計劃執(zhí)行的函數(shù)提供進程上下文。qKswapd守護進程:也稱為頁面調(diào)出守護進程。它通過將臟頁面以低速寫到磁盤上從而使這些頁面在需要時仍可回收使用,這種方式支持虛存子系統(tǒng)。1.bdflush和kupdated守護進程:Linux內(nèi)核使用兩個守護
21、進程bdflush和kupdated將調(diào)整緩存中的數(shù)據(jù)沖洗到磁盤上。當可用內(nèi)存達到下限時,bdflush守護進程將臟緩沖區(qū)從緩沖池中沖洗到磁盤上,每隔一定時間間隔,kupdated守護進程將臟頁面沖洗到磁盤上,以便在系統(tǒng)失效時減少丟失的數(shù)據(jù)。386.3.1 守護進程及其特性守護進程及其特性qportmap端口映射守護進程:提供將RPC(遠程過程調(diào)用)程序號映射為網(wǎng)絡(luò)端口號的服務(wù)。qsyslogd守護進程:可由幫助操作人員把系統(tǒng)消息記入日志的任何程序使用。qinetd守護進程(xinetd):它偵聽系統(tǒng)網(wǎng)絡(luò)接口,以便取得來自網(wǎng)絡(luò)的對各種網(wǎng)絡(luò)服務(wù)進程的請求。qnfsd、lockd、rpciod守護
22、進程:提供對網(wǎng)絡(luò)文件系統(tǒng)(NFS) 的支持。qcron守護進程:在指定的日期和時間執(zhí)行指定的命令。許多系統(tǒng)管理任務(wù)是由cron定期地執(zhí)行相關(guān)程序而實現(xiàn)的。qcupsd守護進程:是打印假脫機進程,它處理對系統(tǒng)提出的所有打印請求。注意:大多數(shù)守護進程都以超級用戶注意:大多數(shù)守護進程都以超級用戶(用戶(用戶ID為為0)特權(quán)運行。沒有一個守護)特權(quán)運行。沒有一個守護進程具有控制終端,其終端名設(shè)置為問進程具有控制終端,其終端名設(shè)置為問號(?)。號(?)。396.3.2 編寫守護進程的要點編寫守護進程的要點406.3.2 編寫守護進程的要點編寫守護進程的要點(1)創(chuàng)建子進程,終止父進程pid=fork()
23、;if(pid0)exit(0); /*終止父進程*/(2)在子進程中創(chuàng)建新會話q setsid函數(shù)用于創(chuàng)建一個新的會話,并擔任該會話組的組長,其作用:q 讓進程擺脫原會話的控制;q 讓進程擺脫原進程組的控制;q 讓進程擺脫原控制終端的控制。q 而setsid函數(shù)能夠使進程完全獨立出來,從而脫離所有其他進程的控制。416.3.2 編寫守護進程的要點編寫守護進程的要點(3)改變工作目錄q 改變工作目錄的常見函數(shù)是chdir。(4)重設(shè)文件創(chuàng)建掩碼q 文件創(chuàng)建掩碼是指屏蔽掉文件創(chuàng)建時的對應(yīng)位。q 把文件創(chuàng)建掩碼設(shè)置為0,可以大大增強該守護進程的靈活性。q 設(shè)置文件創(chuàng)建掩碼的函數(shù)是umask。426
24、.3.2 編寫守護進程的要點編寫守護進程的要點(5)關(guān)閉文件描述符q 通常按如下方式關(guān)閉文件描述符:for(i=0;iNOFILE;i+)close(i);q 或者也可以用如下方式:for(i=0;iMAXFILE;i+)close(i);436.3.3 守護進程的編寫守護進程的編寫q例例6-8:設(shè)計兩個程序,主程序6-8.c和初始化程序init.c。要求主程序每隔十秒鐘向/tmp目錄中的日志6-8.log報告運行狀態(tài)。初始化程序中的init_daemon函數(shù)負責生成守護進程。 446.3.3 守護進程的編寫守護進程的編寫q編輯源程序代碼:注意:這里的注意:這里的fopen函數(shù)必須具有函數(shù)必須
25、具有root權(quán)權(quán)限。如果沒有限。如果沒有root權(quán)限,可以看到守護進權(quán)限,可以看到守護進程的運行,但不會在文件里寫入任何字程的運行,但不會在文件里寫入任何字符。符。456.3.3 守護進程的編寫守護進程的編寫q編譯、運行文件后,沒有任何提示,等待一段時間后,查看一下 6-8.log文件中有沒有文字寫入,輸入“tail -f /tmp/6-8.log”,顯示多條文字,從時間上看,說明守護進程在暗地里每隔10秒寫入一串字符。q用ps命令查看進程。q可見,6-8確實一直在運行,而且看到“?”結(jié)合Linux環(huán)境下進程的知識,知道確實有了一個守護進程。注意:父進程創(chuàng)建了子進程,而父進程又退出之后,此時該
26、子進程就注意:父進程創(chuàng)建了子進程,而父進程又退出之后,此時該子進程就變成了變成了“孤兒進程孤兒進程”。在。在Linux中,每當系統(tǒng)發(fā)現(xiàn)一個孤兒進程,就中,每當系統(tǒng)發(fā)現(xiàn)一個孤兒進程,就會自動由會自動由1號進程(也就是號進程(也就是init進程)收養(yǎng)它,原先的子進程就會變成進程)收養(yǎng)它,原先的子進程就會變成init進程的子進程了。進程的子進程了。466.3.3 守護進程的編寫守護進程的編寫qsetsid函數(shù)說明:思考題:思考題:此例中如果不先終止父進程,就調(diào)用此例中如果不先終止父進程,就調(diào)用setsid函數(shù)會發(fā)生什么?守護函數(shù)會發(fā)生什么?守護進程運行后,注消當前用戶后再登錄進去,守護進程還在運行嗎
27、?進程運行后,注消當前用戶后再登錄進去,守護進程還在運行嗎?1. 編寫一程序,要求運行后成為守護進程,每隔編寫一程序,要求運行后成為守護進程,每隔5分鐘修改一次本機分鐘修改一次本機的的IP地址。地址。476.3.3 守護進程的編寫守護進程的編寫q例例6-9:設(shè)計兩個程序,要求運行后成為守護進程,守護進程又復(fù)制出一個子進程,守護進程和它的子進程都調(diào)用syslog函數(shù),把結(jié)束前的狀態(tài)寫入系統(tǒng)日志文件。q流程圖:486.3.3 守護進程的編寫守護進程的編寫q編輯源程序代碼:注意:調(diào)用注意:調(diào)用openlog、syslog函數(shù),操作函數(shù),操作的系統(tǒng)日志文件的系統(tǒng)日志文件“/var/log/messag
28、e”,必須具有必須具有root權(quán)限。權(quán)限。496.3.3 守護進程的編寫守護進程的編寫q編譯、運行程序后,沒有任何提示,等待一段時間后,查看一下/var/log/messages文件中有沒有文字寫入,輸入“tail -f /var/log/messages”, 此時,顯示多條文字,說明守護進程通過系統(tǒng)日志管理服務(wù),在暗地里寫入一串字符,而且從時間上看出,第二子進程確實是在暫停5秒鐘后退出的。q用ps命令查看進程 。q可見,6-9確實一直在運行,而且看到“?”結(jié)合Linux環(huán)境下進程的知識,知道確實有了一個守護進程。 506.3.3 守護進程的編寫守護進程的編寫qopenlog函數(shù)說明 qsyslog函數(shù)說明思考題:編寫一程序,要求運行后成為守護進程,復(fù)制守思考題:編寫一程序,要求運行后成為守護進程,復(fù)制守護進程的子進程,子進程往某個文件里寫入字符串護進程的子進程,子進程往某個文件里寫入字符串“測試測試守護進程守護進程”,守護進程的錯誤信息輸出到系統(tǒng)日志文件,守護進程的錯誤信息輸出到系統(tǒng)日志文件“/var/log/messages”,程序以普通用戶權(quán)限編譯后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國牙釉質(zhì)粘結(jié)劑行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國塑料用群青紫行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球健康飲食膳食計劃應(yīng)用程序行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球大型掃描電子顯微鏡(SEM)行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球螯合鋅鉀硼尿素行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國化學(xué)鍍化學(xué)品行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國危險區(qū)域軌道衡行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球磁性長度和角度測量系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球食用菌滅菌設(shè)備行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球軍用航空平視顯示器行業(yè)調(diào)研及趨勢分析報告
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 2024-2025學(xué)年人教新版高二(上)英語寒假作業(yè)(五)
- 允許一切發(fā)生:過不緊繃松弛的人生
- 注塑生產(chǎn)過程控制流程
- 教科版六年級科學(xué)下冊 (廚房里的物質(zhì)與變化)教學(xué)課件
- 公務(wù)員面試應(yīng)急應(yīng)變題目大全及解析
- 浙江省炮制規(guī)范2015版電子版
- 冰心《童年的春節(jié)》
- 鄭州小吃詳細地點
- 上海高考英語詞匯手冊
- 2021年江蘇省淮安市淮陰中學(xué)高一政治下學(xué)期期末試題含解析
評論
0/150
提交評論