《linux軟件工程師(C語(yǔ)言)實(shí)用教程》第6章.ppt_第1頁(yè)
《linux軟件工程師(C語(yǔ)言)實(shí)用教程》第6章.ppt_第2頁(yè)
《linux軟件工程師(C語(yǔ)言)實(shí)用教程》第6章.ppt_第3頁(yè)
《linux軟件工程師(C語(yǔ)言)實(shí)用教程》第6章.ppt_第4頁(yè)
《linux軟件工程師(C語(yǔ)言)實(shí)用教程》第6章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章,進(jìn)程控制,2,本章重點(diǎn),進(jìn)程的基本概念及進(jìn)程的結(jié)構(gòu)Linux環(huán)境下進(jìn)程的相關(guān)函數(shù)的應(yīng)用守護(hù)進(jìn)程的概念、啟動(dòng)和建立進(jìn)程控制程序的編寫,3,6.1進(jìn)程簡(jiǎn)介,進(jìn)程是一個(gè)程序的一次執(zhí)行的過(guò)程。在Linux環(huán)境下,每個(gè)正在運(yùn)行的程序都稱為進(jìn)程。每個(gè)進(jìn)程包含進(jìn)程標(biāo)識(shí)符及數(shù)據(jù),這些數(shù)據(jù)包含進(jìn)程變量、外部變量及進(jìn)程堆棧等。1.進(jìn)程與程序由于一個(gè)進(jìn)程對(duì)應(yīng)一個(gè)程序的執(zhí)行,但進(jìn)程不等同于程序。因?yàn)槌绦蚴庆o態(tài)的概念,進(jìn)程是動(dòng)態(tài)的概念。進(jìn)程是程序執(zhí)行的過(guò)程,包括了動(dòng)態(tài)創(chuàng)建、調(diào)度和消亡的整個(gè)過(guò)程。進(jìn)程是程序執(zhí)行和資源管理的最小單位。對(duì)系統(tǒng)而言,當(dāng)用戶在各級(jí)系統(tǒng)中鍵入命令執(zhí)行一個(gè)程序的時(shí)候,它將啟動(dòng)一個(gè)進(jìn)程,因此,一個(gè)程序可以對(duì)應(yīng)多個(gè)進(jìn)程。,4,6.1進(jìn)程簡(jiǎn)介,2.Linux環(huán)境下的進(jìn)程管理Linux環(huán)境下的進(jìn)程管理包括啟動(dòng)進(jìn)程和調(diào)度進(jìn)程。啟動(dòng)進(jìn)程有兩種主要途徑:手工啟動(dòng)和調(diào)度啟動(dòng)。(1)手工啟動(dòng)又可分為前臺(tái)啟動(dòng)和后臺(tái)啟動(dòng)。前臺(tái)啟動(dòng):是手工啟動(dòng)一個(gè)進(jìn)程的最常用方式。一般地,當(dāng)用戶輸入一個(gè)命令時(shí),就已經(jīng)啟動(dòng)了一個(gè)進(jìn)程,并且是一個(gè)前臺(tái)的進(jìn)程。后臺(tái)啟動(dòng):往往是在該進(jìn)程非常耗時(shí),且用戶也不急著需要結(jié)果的時(shí)候啟動(dòng)。一般地,當(dāng)用戶輸入一個(gè)命令結(jié)尾加上一個(gè)“函數(shù)的使用為:execv(/bin/ps,arg);參考程序:#include/*文件預(yù)處理,包含標(biāo)準(zhǔn)輸入輸出庫(kù)*/#include/*文件預(yù)處理,包含getpid、getppid函數(shù)庫(kù)*/intmain()/*C程序的主函數(shù),開(kāi)始入口*/char*arg=ls,-al,NULL;execv(/bin/ls,arg);return1;,15,6.2.2進(jìn)程創(chuàng)建,思考題2:execlp函數(shù)的應(yīng)用,要在程序中執(zhí)行命令:ps-ef,命令ps在/bin目錄下。在這一函數(shù)中,參數(shù)l表示命令或參數(shù)逐個(gè)列舉,參數(shù)p為文件查找方式(不需要給出路徑)。因而此函數(shù)的調(diào)用形式為:execlp(ps,ps,-ef,NULL);請(qǐng)編寫一程序進(jìn)行調(diào)試。思考題3:execl函數(shù)的應(yīng)用,要在程序中執(zhí)行命令:ps-ef,命令ps在/bin目錄下。在這一函數(shù)中,參數(shù)l表示命令或參數(shù)逐個(gè)列舉,文件需給定路徑。因而此函數(shù)的調(diào)用形式為:execl(/bin/ps,ps,-ef,NULL);請(qǐng)編寫一程序進(jìn)行調(diào)試。,16,6.2.2進(jìn)程創(chuàng)建,2.system函數(shù)system函數(shù)是一個(gè)和操作系統(tǒng)緊密相關(guān)的函數(shù)。用戶可以使用它在自己的程序中調(diào)用系統(tǒng)提供的各種命令。使用時(shí)不需要預(yù)處理頭文件“unistd.h”。例6-3:設(shè)計(jì)一個(gè)程序,要求測(cè)試到LUPA社區(qū)的網(wǎng)絡(luò)連通狀況。編輯源程序代碼:,17,6.2.2進(jìn)程創(chuàng)建,編譯、運(yùn)行程序,系統(tǒng)會(huì)出現(xiàn)運(yùn)行結(jié)果,先顯示Linux系統(tǒng)分配的進(jìn)程號(hào)(PID),接著運(yùn)行ping程序,創(chuàng)建新的進(jìn)程。再打開(kāi)一個(gè)終端,用ps查看原進(jìn)程和新創(chuàng)建進(jìn)程的進(jìn)程號(hào)(PID)??梢钥吹剑瓉?lái)6-3的進(jìn)程(PID)值和新進(jìn)程的父進(jìn)程號(hào)(PPID)值相同,在新進(jìn)程創(chuàng)建后,原來(lái)的進(jìn)程并沒(méi)有終止。,注意:在第二個(gè)終端的時(shí)候,第一個(gè)終端中的ping不能結(jié)束。,18,6.2.2進(jìn)程創(chuàng)建,system函數(shù)說(shuō)明,思考題:如何使用前面的exec函數(shù)族中的函數(shù),調(diào)用此例中的系統(tǒng)命令“”?,19,6.2.2進(jìn)程創(chuàng)建,3.fork函數(shù)使用fork函數(shù)創(chuàng)建進(jìn)程時(shí),新的進(jìn)程叫子進(jìn)程,原來(lái)調(diào)用fork函數(shù)的進(jìn)程則稱為父進(jìn)程。子進(jìn)程會(huì)復(fù)制父進(jìn)程的數(shù)據(jù)和堆棧空間,并繼承父進(jìn)程的用戶代碼、組代碼、環(huán)境變量、已經(jīng)打開(kāi)的文件代碼、工作目錄及資源限制等,但是子進(jìn)程和父進(jìn)程使用不同的內(nèi)存空間。,20,6.2.2進(jìn)程創(chuàng)建,例6-4:設(shè)計(jì)一個(gè)程序,要求先顯示當(dāng)前目錄下的文件信息,然后測(cè)試到LUPA社區(qū)的網(wǎng)絡(luò)連通狀況。編輯源程序代碼,21,6.2.2進(jìn)程創(chuàng)建,編譯、運(yùn)行程序,觀察結(jié)果??梢钥吹剑褂胒ork函數(shù)創(chuàng)建了一個(gè)子進(jìn)程,子進(jìn)程的返回值是0,父進(jìn)程的返回值是子進(jìn)程的進(jìn)程號(hào)(PID)。而子進(jìn)程的父進(jìn)程號(hào)(PPID)和父進(jìn)程的進(jìn)程號(hào)(PID)相同??梢?jiàn),子進(jìn)程由父進(jìn)程派生出來(lái)。,注意:fork函數(shù)使用一次就創(chuàng)建一個(gè)進(jìn)程,所以若把fork函數(shù)放在ifelse判斷語(yǔ)句或for循環(huán)語(yǔ)句中則要小心,不能多次使用fork函數(shù)。,如:voidmain()for(;)fork();,22,6.2.2進(jìn)程創(chuàng)建,sleep函數(shù)說(shuō)明,fork函數(shù)說(shuō)明,23,6.2.2進(jìn)程創(chuàng)建,思考題:此例中,為什么用sleep等待10秒鐘?思考題:設(shè)計(jì)一個(gè)程序,在子進(jìn)程中調(diào)用函數(shù)execl(/bin/ps,ps,-ef,NULL),而在父進(jìn)程中調(diào)用函數(shù)execle(/bin/env,env,NULL,envp),其中有定義:char*envp=PATH=/tmp,USER=liu,NULL;請(qǐng)編寫并進(jìn)行調(diào)試。,24,6.2.3進(jìn)程終止,濫用fork函數(shù)會(huì)占滿系統(tǒng)進(jìn)程,而且子進(jìn)程與父進(jìn)程使用不同的內(nèi)存空間,不斷產(chǎn)生子進(jìn)程,也可能讓系統(tǒng)資源消耗殆盡。Linux環(huán)境下c終止進(jìn)程主要用exit和_exit函數(shù)。例6-5:設(shè)計(jì)一個(gè)程序,要求子進(jìn)程和父進(jìn)程都在顯示輸出一些文字后分別用exit和_exit函數(shù)終止進(jìn)程。編輯源程序代碼:,觀察結(jié)果可以看出,調(diào)用exit函數(shù)時(shí),緩沖區(qū)中的記錄能正常輸出;而調(diào)用_exit時(shí),緩沖區(qū)中的記錄無(wú)法輸出。,25,6.2.3進(jìn)程終止,_exit()函數(shù)作用:直接使進(jìn)程停止運(yùn)行,清除其使用的內(nèi)存空間,并清除其在內(nèi)核中的各種數(shù)據(jù)結(jié)構(gòu);exit()函數(shù)則在執(zhí)行退出之前加了若干道工序,exit函數(shù)在調(diào)用exit系統(tǒng)之前要查看文件的打開(kāi)情況,把文件緩沖區(qū)中的內(nèi)容寫回文件。,26,6.2.3進(jìn)程終止,exit函數(shù)說(shuō)明,_exit函數(shù)說(shuō)明,27,6.2.4僵尸進(jìn)程,一個(gè)僵尸進(jìn)程(zombie),是指已終止運(yùn)行,但尚末被清除的進(jìn)程,又稱為過(guò)渡進(jìn)程。當(dāng)使用fork函數(shù)創(chuàng)建子進(jìn)程時(shí),由于子進(jìn)程有可能比父進(jìn)程晚終止,父進(jìn)程終止后,子進(jìn)程還沒(méi)終止,子進(jìn)程就成了僵尸進(jìn)程。為避免這種情況,可以在父進(jìn)程中調(diào)用wait或waitpid函數(shù)。wait函數(shù)是用于使父進(jìn)程阻塞,直到一個(gè)子進(jìn)程終止或者該進(jìn)程接到了一個(gè)指定的信號(hào)為止。waitpid的作用和wait一樣,但它并不一定要等待第一個(gè)終止的子進(jìn)程,它還有若干選項(xiàng),也能支持作業(yè)控制。實(shí)際上wait函數(shù)只是waitpid函數(shù)的一個(gè)特例,在Linux內(nèi)部實(shí)現(xiàn)wait函數(shù)時(shí)直接調(diào)用的就是waitpid函數(shù)。,28,6.2.4僵尸進(jìn)程,例6-6:設(shè)計(jì)一個(gè)程序,要求復(fù)制進(jìn)程,子進(jìn)程顯示自己的進(jìn)程號(hào)(PID)后暫停一段時(shí)間,父進(jìn)程等待子進(jìn)程正常結(jié)束,打印顯示等待的進(jìn)程號(hào)(PID)和等待的進(jìn)程退出狀態(tài)。流程圖:,29,6.2.4僵尸進(jìn)程,編輯源程序代碼:,此例中的子進(jìn)程運(yùn)行時(shí)間,明顯比父進(jìn)程時(shí)間長(zhǎng)。為了避免子進(jìn)程成為僵尸進(jìn)程,父進(jìn)程調(diào)用wait,阻塞父進(jìn)程的運(yùn)行,等待子進(jìn)程正常結(jié)束,父進(jìn)程才繼續(xù)運(yùn)行,直到正常結(jié)束。,30,6.2.4僵尸進(jìn)程,wait函數(shù)說(shuō)明,31,6.2.4僵尸進(jìn)程,例6-7:設(shè)計(jì)一個(gè)程序,要求用戶可以選擇是否復(fù)制進(jìn)程,子進(jìn)程模仿思科(Cisco)1912交換機(jī)的開(kāi)機(jī)界面,以命令行的方式讓用戶選擇進(jìn)入,父進(jìn)程判斷子進(jìn)程是否正常終止。流程圖:,32,6.2.4僵尸進(jìn)程,編輯源程序代碼:,33,6.2.4僵尸進(jìn)程,編譯、運(yùn)行程序,提示是否復(fù)制進(jìn)程,先選擇“2.不復(fù)制進(jìn)程”,此時(shí)沒(méi)有產(chǎn)生子進(jìn)程,返回值為“0”。再次運(yùn)行程序后,選擇“1.復(fù)制進(jìn)程”,此時(shí)產(chǎn)生子進(jìn)程,子進(jìn)程的功能是模擬交換機(jī)的開(kāi)機(jī)界面,提示選擇畫面,這兒選擇0,進(jìn)入子程序display0,等待子程序運(yùn)行終止后,返回值為“1”,父進(jìn)程才終止。修改程序:不用waitpid函數(shù)。再次運(yùn)行程序后,選擇“1.復(fù)制進(jìn)程”,這時(shí)候父進(jìn)程沒(méi)有等待子進(jìn)程,也就是在模擬顯示完交換機(jī)的開(kāi)機(jī)界面后,根本沒(méi)來(lái)得及輸入選擇,父進(jìn)程就終止了,子進(jìn)程就變成了僵尸進(jìn)程。,此例可以看出,在沒(méi)有語(yǔ)法、語(yǔ)義等錯(cuò)誤的情況下,程序還是沒(méi)有完成設(shè)計(jì)要求??梢?jiàn),在多進(jìn)程程序設(shè)計(jì)時(shí),除了養(yǎng)成使用完后就終止的良好習(xí)慣,還要讓子進(jìn)程工作完成后再終止,這個(gè)時(shí)候父進(jìn)程就得靈活使用wait函數(shù)和waitpid函數(shù)。,34,6.2.4僵尸進(jìn)程,waitpid函數(shù)說(shuō)明,35,6.3Linux守護(hù)進(jìn)程,守護(hù)進(jìn)程(Daemon)是運(yùn)行在后臺(tái)的一種特殊進(jìn)程。守護(hù)進(jìn)程獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程是一種很有用的進(jìn)程。Linux的大多數(shù)服務(wù)器就是用守護(hù)進(jìn)程實(shí)現(xiàn)的。同時(shí),守護(hù)進(jìn)程完成許多系統(tǒng)任務(wù)。,36,6.3.1守護(hù)進(jìn)程及其特性,守護(hù)進(jìn)程最重要的特性是后臺(tái)運(yùn)行。其次,守護(hù)進(jìn)程必須與其運(yùn)行前的環(huán)境隔離開(kāi)來(lái)。這些環(huán)境包括未關(guān)閉的文件描述符,控制終端,會(huì)話和進(jìn)程組,工作目錄以及文件創(chuàng)建掩碼等。這些環(huán)境通常是守護(hù)進(jìn)程從執(zhí)行它的父進(jìn)程(特別是shell)中繼承下來(lái)的。最后,守護(hù)進(jìn)程的啟動(dòng)方式有其特殊之處。它可以在Linux系統(tǒng)啟動(dòng)時(shí)從啟動(dòng)腳本/etc/rc.d中啟動(dòng),也可以由作業(yè)規(guī)劃進(jìn)程crond啟動(dòng),還可以由用戶終端(通常是shell)執(zhí)行。,37,6.3.1守護(hù)進(jìn)程及其特性,通過(guò)psaux命令可查看Linux環(huán)境下的守護(hù)進(jìn)程:Init系統(tǒng)守護(hù)進(jìn)程:它是進(jìn)程1,負(fù)責(zé)啟動(dòng)各運(yùn)行層次特定的系統(tǒng)服務(wù)。Keventd守護(hù)進(jìn)程:為在內(nèi)核中運(yùn)行計(jì)劃執(zhí)行的函數(shù)提供進(jìn)程上下文。Kswapd守護(hù)進(jìn)程:也稱為頁(yè)面調(diào)出守護(hù)進(jìn)程。它通過(guò)將臟頁(yè)面以低速寫到磁盤上從而使這些頁(yè)面在需要時(shí)仍可回收使用,這種方式支持虛存子系統(tǒng)。bdflush和kupdated守護(hù)進(jìn)程:Linux內(nèi)核使用兩個(gè)守護(hù)進(jìn)程bdflush和kupdated將調(diào)整緩存中的數(shù)據(jù)沖洗到磁盤上。當(dāng)可用內(nèi)存達(dá)到下限時(shí),bdflush守護(hù)進(jìn)程將臟緩沖區(qū)從緩沖池中沖洗到磁盤上,每隔一定時(shí)間間隔,kupdated守護(hù)進(jìn)程將臟頁(yè)面沖洗到磁盤上,以便在系統(tǒng)失效時(shí)減少丟失的數(shù)據(jù)。,38,6.3.1守護(hù)進(jìn)程及其特性,portmap端口映射守護(hù)進(jìn)程:提供將RPC(遠(yuǎn)程過(guò)程調(diào)用)程序號(hào)映射為網(wǎng)絡(luò)端口號(hào)的服務(wù)。syslogd守護(hù)進(jìn)程:可由幫助操作人員把系統(tǒng)消息記入日志的任何程序使用。inetd守護(hù)進(jìn)程(xinetd):它偵聽(tīng)系統(tǒng)網(wǎng)絡(luò)接口,以便取得來(lái)自網(wǎng)絡(luò)的對(duì)各種網(wǎng)絡(luò)服務(wù)進(jìn)程的請(qǐng)求。nfsd、lockd、rpciod守護(hù)進(jìn)程:提供對(duì)網(wǎng)絡(luò)文件系統(tǒng)(NFS)的支持。cron守護(hù)進(jìn)程:在指定的日期和時(shí)間執(zhí)行指定的命令。許多系統(tǒng)管理任務(wù)是由cron定期地執(zhí)行相關(guān)程序而實(shí)現(xiàn)的。cupsd守護(hù)進(jìn)程:是打印假脫機(jī)進(jìn)程,它處理對(duì)系統(tǒng)提出的所有打印請(qǐng)求。,注意:大多數(shù)守護(hù)進(jìn)程都以超級(jí)用戶(用戶ID為0)特權(quán)運(yùn)行。沒(méi)有一個(gè)守護(hù)進(jìn)程具有控制終端,其終端名設(shè)置為問(wèn)號(hào)(?)。,39,6.3.2編寫守護(hù)進(jìn)程的要點(diǎn),40,6.3.2編寫守護(hù)進(jìn)程的要點(diǎn),(1)創(chuàng)建子進(jìn)程,終止父進(jìn)程pid=fork();if(pid0)exit(0);/*終止父進(jìn)程*/(2)在子進(jìn)程中創(chuàng)建新會(huì)話setsid函數(shù)用于創(chuàng)建一個(gè)新的會(huì)話,并擔(dān)任該會(huì)話組的組長(zhǎng),其作用:讓進(jìn)程擺脫原會(huì)話的控制;讓進(jìn)程擺脫原進(jìn)程組的控制;讓進(jìn)程擺脫原控制終端的控制。而setsid函數(shù)能夠使進(jìn)程完全獨(dú)立出來(lái),從而脫離所有其他進(jìn)程的控制。,41,6.3.2編寫守護(hù)進(jìn)程的要點(diǎn),(3)改變工作目錄改變工作目錄的常見(jiàn)函數(shù)是chdir。(4)重設(shè)文件創(chuàng)建掩碼文件創(chuàng)建掩碼是指屏蔽掉文件創(chuàng)建時(shí)的對(duì)應(yīng)位。把文件創(chuàng)建掩碼設(shè)置為0,可以大大增強(qiáng)該守護(hù)進(jìn)程的靈活性。設(shè)置文件創(chuàng)建掩碼的函數(shù)是umask。,42,6.3.2編寫守護(hù)進(jìn)程的要點(diǎn),(5)關(guān)閉文件描述符通常按如下方式關(guān)閉文件描述符:for(i=0;iNOFILE;i+)close(i);或者也可以用如下方式:for(i=0;iMAXFILE;i+)close(i);,43,6.3.3守護(hù)進(jìn)程的編寫,例6-8:設(shè)計(jì)兩個(gè)程序,主程序6-8.c和初始化程序init.c。要求主程序每隔十秒鐘向/tmp目錄中的日志6-8.log報(bào)告運(yùn)行狀態(tài)。初始化程序中的init_daemon函數(shù)負(fù)責(zé)生成守護(hù)進(jìn)程。,44,6.3.3守護(hù)進(jìn)程的編寫,編輯源程序代碼:,注意:這里的fopen函數(shù)必須具有root權(quán)限。如果沒(méi)有root權(quán)限,可以看到守護(hù)進(jìn)程的運(yùn)行,但不會(huì)在文件里寫入任何字符。,45,6.3.3守護(hù)進(jìn)程的編寫,編譯、運(yùn)行文件后,沒(méi)有任何提示,等待一段時(shí)間后,查看一下6-8.log文件中有沒(méi)有文字寫入,輸入“tail-f/tmp/6-8.log”,顯示多條文字,從時(shí)間上看,說(shuō)明守護(hù)進(jìn)程在暗地里每隔10秒寫入一串字符。用ps命令查看進(jìn)程??梢?jiàn),6-8確實(shí)一直在運(yùn)行,而且看到“?”結(jié)合Linux環(huán)境下進(jìn)程的知識(shí),知道確實(shí)有了一個(gè)守護(hù)進(jìn)程。,注意:父進(jìn)程創(chuàng)建了子進(jìn)程,而父進(jìn)程又退出之后,此時(shí)該子進(jìn)程就變成了“孤兒進(jìn)程”。在Linux中,每當(dāng)系統(tǒng)發(fā)現(xiàn)一個(gè)孤兒進(jìn)程,就會(huì)自動(dòng)由1號(hào)進(jìn)程(也就是init進(jìn)程)收養(yǎng)它,原先的子進(jìn)程就會(huì)變成init進(jìn)程的子進(jìn)程了。,46,6.3.3守護(hù)進(jìn)程的編寫,setsid函數(shù)說(shuō)明:,思考題:此例中如果不先終止父進(jìn)程,就調(diào)用setsid函數(shù)會(huì)發(fā)生什么?守護(hù)進(jìn)程運(yùn)行后,注消當(dāng)前用戶后再登錄進(jìn)去,守護(hù)進(jìn)程還在運(yùn)行嗎?編寫一程序,要求運(yùn)行后成為守護(hù)進(jìn)程,每隔5分鐘修改一次本機(jī)的IP地址。,47,6.3.3守護(hù)進(jìn)程的編寫,例6-9:設(shè)計(jì)兩個(gè)程序,要求運(yùn)行后成為守護(hù)進(jìn)程,守護(hù)進(jìn)程又復(fù)制出一個(gè)子進(jìn)程,守護(hù)進(jìn)程和它的子進(jìn)程都調(diào)用syslog函數(shù),把結(jié)束前的狀態(tài)寫入系統(tǒng)日志文件。流程圖:,48,6.3.3守護(hù)進(jìn)程的編寫,編輯源程序代碼:,注意:調(diào)用openlog、syslog函數(shù),操作的系統(tǒng)日志文件“/var/log/message”,必須具有root權(quán)限。,49,6.3.3守護(hù)進(jìn)程的編寫,編譯、運(yùn)行程序后,沒(méi)有任何提示,等待一段時(shí)間后,查看一下/var/log/messages文件中有沒(méi)有文字寫入,輸入“tail-f/var/log/messages”,此時(shí),顯示多條文字,說(shuō)明守護(hù)進(jìn)程通過(guò)系統(tǒng)日志管理服務(wù),在暗地里寫入一串字符,而且從時(shí)間上看出,第二子進(jìn)程確實(shí)是在暫停5秒鐘后退出的。用ps命令查看進(jìn)程??梢?jiàn),6-9確實(shí)一直在運(yùn)行,而且看到“?”結(jié)合Linux環(huán)境下進(jìn)程的知識(shí),知道確實(shí)有了一個(gè)守護(hù)進(jìn)程。,50,6.3.3守護(hù)進(jìn)程的編寫,openlog函數(shù)說(shuō)明,syslog函數(shù)說(shuō)明,思考題:編寫一程序,要求運(yùn)行后成為守護(hù)進(jìn)程,復(fù)制守護(hù)進(jìn)程的子進(jìn)程,子進(jìn)程往某個(gè)文件里寫入字符串“測(cè)試守護(hù)進(jìn)程”,守護(hù)進(jìn)程的錯(cuò)誤信息輸出到系統(tǒng)日志文件“/var/log/messages”,程序以普通用戶權(quán)限編譯后運(yùn)行調(diào)試會(huì)有什么結(jié)果?請(qǐng)把產(chǎn)生守護(hù)進(jìn)程的部分分割成獨(dú)立的程序文件。,51,思考與實(shí)驗(yàn),什么是進(jìn)程?進(jìn)程與作業(yè)有何區(qū)別?進(jìn)程啟動(dòng)的方式有哪幾種?用exec函數(shù)創(chuàng)建一個(gè)進(jìn)程,顯示當(dāng)前目錄下的文件信息。execle函數(shù)的應(yīng)用,要在程序執(zhí)行時(shí)設(shè)定環(huán)境變量,路徑為tmp,用戶為liu,執(zhí)行命令env時(shí)把這些環(huán)境變量傳遞給系統(tǒng),在這一函數(shù)中,參數(shù)e表示可傳遞新進(jìn)程環(huán)境變量

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論