第 8 章 Linux進(jìn)程電子課件_第1頁
第 8 章 Linux進(jìn)程電子課件_第2頁
第 8 章 Linux進(jìn)程電子課件_第3頁
第 8 章 Linux進(jìn)程電子課件_第4頁
第 8 章 Linux進(jìn)程電子課件_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章Linux進(jìn)程內(nèi)容提要Linux進(jìn)程概述進(jìn)程地址空間進(jìn)程控制進(jìn)程優(yōu)先級(jí)和調(diào)度策略守護(hù)近程8.1Linux進(jìn)程概述進(jìn)程概述

進(jìn)程是程序的一次運(yùn)行,是運(yùn)行中的程序,它是處理器調(diào)度的基本單位,Linux支持多種調(diào)度策略,例如,完全公平調(diào)度和實(shí)時(shí)調(diào)度等。從進(jìn)程所處的層次,進(jìn)程可分為用戶進(jìn)程和內(nèi)核線程,內(nèi)核線程屬于內(nèi)核的一部分,用戶進(jìn)程最初源自加載的可執(zhí)行程序。進(jìn)程也是資源的擁有者和管理者,其管理的內(nèi)容包括地址空間、打開的文件和身份憑證等,它們均存儲(chǔ)于每個(gè)進(jìn)程的進(jìn)程控制塊。進(jìn)程管理的資源textdata文件描述符表stack

可執(zhí)行文件實(shí)際用戶ID實(shí)際用戶組ID有效用戶ID有效用戶組ID用戶標(biāo)識(shí)進(jìn)程與會(huì)話標(biāo)識(shí)虛擬地址空間打開的文件工作目錄信號(hào)開始地址結(jié)束地址缺頁操作開始地址結(jié)束地址缺頁操作內(nèi)存區(qū)域1內(nèi)存區(qū)域2用戶地址空間目錄項(xiàng)當(dāng)前偏移量文件操作集文件描述進(jìn)程ID父進(jìn)程ID進(jìn)程組ID會(huì)話ID進(jìn)程標(biāo)識(shí)用戶身份進(jìn)程控制塊信號(hào)06301應(yīng)用編程接口分類API功能描述用戶地址空間malloc/free申請(qǐng)/釋放動(dòng)態(tài)內(nèi)存brk設(shè)置堆區(qū)域的大小進(jìn)程控制fork/_exit創(chuàng)建/終止子進(jìn)程execve加載可執(zhí)行二進(jìn)制映像文件system執(zhí)行Shell命令wait/waitpid等待子進(jìn)程狀態(tài)的改變進(jìn)程優(yōu)先給與調(diào)度策略sched_getscheduler/sched_setscheduler獲取/設(shè)置進(jìn)程/線程所屬的調(diào)度策略sched_getparam/sched_setparam獲取/設(shè)置調(diào)度參數(shù)getpriority/setpriority獲取/設(shè)置進(jìn)程的優(yōu)先級(jí)sched_yield釋放CPU的控制權(quán)sched_getaffinity/sched_setaffinity獲取/設(shè)置進(jìn)程的CPU親和力openlog/closelog打開/關(guān)閉與日志系統(tǒng)的鏈接syslog記錄一條日志信息8.2進(jìn)程地址空間進(jìn)程地址空間的劃分

進(jìn)程地址空間被劃分為內(nèi)核空間和用戶空間,內(nèi)核空間為內(nèi)核映射,它們共享內(nèi)核;用戶空間源自加載的可執(zhí)行程序,它們通常彼此獨(dú)立。為了便于管理,用戶空間被劃分為若干區(qū)域,其中包括,代碼區(qū)、數(shù)據(jù)區(qū)、堆、棧和mmap映射區(qū),不同區(qū)域的功能也不相同。進(jìn)程地址空間結(jié)構(gòu)未初始化數(shù)據(jù)(.bss)Linux內(nèi)核棧(stack)初始化數(shù)據(jù)(.data)代碼(.text)0xc0000000用戶虛擬地址空間堆(heap)mmap內(nèi)存映射etextedataendbrk輔助信息環(huán)境變量命令行參數(shù)0x000000000x08048000文本段

代碼區(qū)源自可執(zhí)行文件的文本段,為程序加載時(shí)生成的內(nèi)存映射,其內(nèi)容為源碼編譯生成的指令序列和只讀數(shù)據(jù)。進(jìn)程運(yùn)行期間,代碼區(qū)內(nèi)容保持不變,因此,多個(gè)運(yùn)行實(shí)例可共享代碼區(qū),代碼區(qū)僅需保留一份副本。數(shù)據(jù)段

數(shù)據(jù)區(qū)源自可執(zhí)行文件的數(shù)據(jù)段,為程序加載時(shí)生成的內(nèi)存映射,其內(nèi)容為全局變量和靜態(tài)變量,它被進(jìn)一步分為未初始化數(shù)據(jù)區(qū)和初始化數(shù)據(jù)區(qū)。未初始化的全局變量和靜態(tài)變量存儲(chǔ)于未初始化數(shù)據(jù)區(qū),已初始化的全局變量和靜態(tài)變量存儲(chǔ)于初始化數(shù)據(jù)區(qū),有些編譯器允許將未初始化數(shù)據(jù)和初始化數(shù)據(jù)合并成一個(gè)數(shù)據(jù)段。進(jìn)程執(zhí)行期間,數(shù)據(jù)區(qū)的內(nèi)容可能發(fā)生改變,因此,程序的多個(gè)運(yùn)行實(shí)例有各自獨(dú)立的數(shù)據(jù)區(qū)。4堆(heap)堆是內(nèi)核為程序運(yùn)行所構(gòu)建環(huán)境的一部分,它位于數(shù)據(jù)區(qū)與棧之間,用于進(jìn)程的動(dòng)態(tài)內(nèi)存管理。例如,C/C++中的malloc/new和free/delete函數(shù)。

Linux系統(tǒng)中,用戶進(jìn)程所使用的堆由glibc實(shí)現(xiàn),在可執(zhí)行文件加載至用戶空間時(shí)完成初始化。棧(stack)

棧同樣是內(nèi)核為程序運(yùn)行所構(gòu)建環(huán)境的一部分,它位于用戶空間的底部,它是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),用于存放臨時(shí)數(shù)據(jù),例如,函數(shù)內(nèi)的局部變量、函數(shù)參數(shù)和返回地址等。在加載程序時(shí),會(huì)將輔助信息、環(huán)境變量和命令行參數(shù)壓入棧底。其中,輔助信息以向量表的形式存儲(chǔ),實(shí)現(xiàn)信息向進(jìn)程的傳遞。棧幀結(jié)構(gòu)字符串a(chǎn)rgcargv[0]...argv[n]0environ[0]...environ[n]0...AT_NULL字符串命令行參數(shù)數(shù)量命令行參數(shù)起始地址環(huán)境變量起始地址...輔助信息向量表mmap內(nèi)存映射區(qū)

mmap內(nèi)存映射區(qū)位于堆和棧之間,可利用mmap函數(shù)創(chuàng)建,主要用于共享庫的加載、共享內(nèi)存和文件I/O映射等。實(shí)例分析externchar**environ;int

main(int

argc,char*argv[]){ for(intj=0;j<argc;j++)

printf("argv[%d]:%s\n",j,argv[j]); for(intj=0;environ[j];j++)

printf("environ[%d]:%s\n",j,environ[j]);exit(0);}8.3進(jìn)程控制內(nèi)容提要子進(jìn)程的創(chuàng)建與終止加載可執(zhí)行文件程序的啟動(dòng)與結(jié)束執(zhí)行Shell命令監(jiān)控進(jìn)程狀態(tài)的改變子進(jìn)程的創(chuàng)建

子進(jìn)程被創(chuàng)建時(shí),內(nèi)核將調(diào)用者進(jìn)程擁有的資源復(fù)制給子進(jìn)程,資源包括進(jìn)程的用戶空間和打開的文件等。為了使它們有各自的執(zhí)行邏輯,內(nèi)核在父進(jìn)程的棧中壓入子進(jìn)程ID,在子進(jìn)程的棧中壓入0,當(dāng)它們再次運(yùn)行時(shí),按各自軌跡執(zhí)行。進(jìn)程執(zhí)行期間,可能只有少數(shù)數(shù)據(jù)被修改,為了節(jié)省資源,Linux內(nèi)核采用了寫時(shí)復(fù)制算法(COW)。寫時(shí)復(fù)制COWstacktask_struct

datastackcodetask_struct

父進(jìn)程子進(jìn)程datastackcodedatacodetask_struct

task_struct

父進(jìn)程子進(jìn)程代碼區(qū)數(shù)據(jù)區(qū)棧區(qū)代碼區(qū)數(shù)據(jù)區(qū)棧區(qū)代碼區(qū)數(shù)據(jù)區(qū)棧區(qū)物理頁映射映射創(chuàng)建子進(jìn)程時(shí),父子進(jìn)程共享用戶地址空間父子進(jìn)程的一方在修改數(shù)據(jù)前,各自生成一個(gè)拷貝創(chuàng)建子進(jìn)程fork頭文件

#include<unistd.h>函數(shù)原型

pid_tfork();功能 創(chuàng)建子進(jìn)程。參數(shù) 無。返回值 父進(jìn)程成功返回新建子進(jìn)程ID, 子進(jìn)程成功返回0,失敗返回-1。

實(shí)例分析int glob=10;int

main(void){

intlocal;

pid_t

pid; local=8; if((pid=fork())==0){ sleep(2); }else{ glob++; local--; sleep(10); }

printf("pid=%d,glob=%d,localar=%d\n",getpid(),glob,local); exit(0);}結(jié)束進(jìn)程

終止的進(jìn)程進(jìn)入僵尸狀態(tài),釋放除返回值外的其他所有資源,等待父進(jìn)程確認(rèn),父進(jìn)程獲得返回值后,釋放其產(chǎn)六信息,根據(jù)返回值作相應(yīng)處理。

_exit和exot函數(shù)軍可用于結(jié)束進(jìn)程,_exit屬于核心函數(shù),而exit屬于庫函數(shù),exit建立在_exit函數(shù)基礎(chǔ)之上,此外,還負(fù)責(zé)進(jìn)程前的善后處理工作。_exit函數(shù)頭文件

#include<unistd.h>函數(shù)原型

void_exit(intstatus);功能 結(jié)束進(jìn)程。參數(shù)

Status:結(jié)束狀態(tài)。返回值 不返回。exit函數(shù)頭文件

#include<stdlib.h>函數(shù)原型

voidexit(intstatus);功能 終止進(jìn)程。參數(shù)

status:返回值。返回值 無。ELF格式ELF(ExcutableandLinkableFormat)是一種可執(zhí)行和可鏈接的格式,它源自SystemV系統(tǒng),與其他格式相比,具有較強(qiáng)的靈活性,根據(jù)用途,可進(jìn)一步分為四種類型。1.可執(zhí)行文件該格式的文件可直接加載執(zhí)行,由可重定位目標(biāo)文件經(jīng)靜態(tài)鏈接產(chǎn)生。2.可重定位文件(.o文件)該格式的文件由源碼經(jīng)編譯后生成,是一種包含重定位信息的中間代碼,供鏈接器使用。ELF格式(續(xù))3.共享庫(.so文件)該格式的文件為源碼經(jīng)編譯后生成地址無關(guān)的目標(biāo)文件,供動(dòng)態(tài)鏈接器在程序加載時(shí)使用。4.核心轉(zhuǎn)儲(chǔ)文件該格式的文件在信號(hào)處理時(shí)生成,為信號(hào)發(fā)生時(shí)進(jìn)程的內(nèi)存映像,用于程序調(diào)試。elf文件格式程序頭表節(jié)頭表ELF頭可鏈接視圖可執(zhí)行視圖段節(jié)ELF文件通常包含程序頭和節(jié)頭兩種類型的頭部結(jié)構(gòu),可從可執(zhí)行和可鏈接兩個(gè)角度描述ELF文件的內(nèi)容,加載可執(zhí)行文件頭文件

#include<unistd.h>函數(shù)原型

int

execve(constchar*filename,char*constargv[],char*constenvp[]);功能 加載可執(zhí)行文件。參數(shù)

filename:文件的路徑名。

argv[]:命令行參數(shù)。

envp[]:環(huán)境變量。返回值 成功不返回,失敗返回-1。加載可執(zhí)行程序task_struct

文件頭堆棧段數(shù)據(jù)段文本段ELF映像磁盤代碼區(qū)數(shù)據(jù)區(qū)棧區(qū)棧區(qū)數(shù)據(jù)區(qū)代碼區(qū)實(shí)例分析int

main(int

argc,char*argv[]){ char*newargv[]={NULL,"hello","world",NULL}; char*newenviron[]={"var1=123","var2=hello","helloUnix",NULL}; if(argc!=2){

fprintf(stderr,"Usage:%s<file-to-exec>\n",argv[0]); exit(1); } newargv[0]=argv[1]; execve(argv[1],newargv,newenviron);

perror("execve"); exit(0);}程序的啟動(dòng)與結(jié)束

出于編寫程序的便捷性,glibc對(duì)C程序進(jìn)行了封裝,從程序員的角度,C程序從main函數(shù)開始運(yùn)行,但事實(shí)上程序自start-up開始啟動(dòng),start-up在鏈接生成可執(zhí)行文件時(shí)引入,目的是完成一系列初始化,例如,動(dòng)態(tài)內(nèi)存管理的初始化,待start-up執(zhí)行完成后轉(zhuǎn)入main函數(shù),最后通過exit函數(shù)結(jié)束進(jìn)程,程序的運(yùn)行exit庫函數(shù)標(biāo)準(zhǔn)I/O文件流清理exec終止處理函數(shù)1終止處理函數(shù)n…..Linux內(nèi)核exitexitexit_exit用戶進(jìn)程_exit_exitmain函數(shù)用戶自定義函數(shù)start-up函數(shù)監(jiān)控子進(jìn)程狀態(tài)的改變

進(jìn)程運(yùn)行期間狀態(tài)可能會(huì)發(fā)生變化,例如,收到SIGSTOP/SIGCONT信號(hào)使進(jìn)程暫停/恢復(fù)運(yùn)行,因調(diào)用exit函數(shù)、從main函數(shù)返回或收到SIGTERM信號(hào)導(dǎo)致進(jìn)程終止。為了監(jiān)控子進(jìn)程狀態(tài)的改變,內(nèi)核提供了同步和異步兩種方式,若采用同步方式;進(jìn)程可通過調(diào)用wait/waitpid函數(shù),以阻塞方式等待,直至目標(biāo)進(jìn)程狀態(tài)發(fā)生改變;若采用異步方式,當(dāng)進(jìn)程狀態(tài)改變時(shí),父進(jìn)程會(huì)收到來自子進(jìn)程的SIGCHLD信號(hào)。等待子進(jìn)程狀態(tài)改變頭文件

#include<sys/types.h> #include<sys/wait.h>函數(shù)原型

pid_t

wait(int*wstatus);

pid_t

waitpid(pid_t

pid,int*wstatus,intoptions);功能 等待子進(jìn)程狀態(tài)發(fā)生改變。參數(shù)

pid:指定監(jiān)控的子進(jìn)程。

wstatus:返回狀態(tài)。

options:操作選項(xiàng)。返回值

wait/waitpid成功返回狀態(tài)改變的進(jìn)程ID,失敗返回-1。waitpid函數(shù)參數(shù)status的宏含義WIFEXITED(wstatus)若為真,子進(jìn)程正常結(jié)束,調(diào)用_exit/exit函數(shù)或從main函數(shù)返回WIFSIGNALED(wstatus)若為真,子進(jìn)程因信號(hào)而終止WIFSTOPPED(wstatus)若為真,子進(jìn)程因信號(hào)而暫停WIFCONTINUED(wstatus)若為真,子進(jìn)程因SIGCONT信號(hào)繼續(xù)運(yùn)行,自內(nèi)核2.6.10起生效參數(shù)pid含義<?1任意進(jìn)程組為-pid的子進(jìn)程?1任意子進(jìn)程0任意與調(diào)用者同組的子進(jìn)程>0進(jìn)程ID為pid的任意子進(jìn)程waitpid函數(shù)中參數(shù)pid的定義waitpid函數(shù)中wstatus的宏定義8.4進(jìn)程優(yōu)先級(jí)和調(diào)度策略內(nèi)容提要調(diào)度策略概述調(diào)度策略完全公平調(diào)度CFS實(shí)時(shí)調(diào)度策略進(jìn)程的CPU親和力調(diào)度策略概述Linux繼承了Unix基于時(shí)間片的進(jìn)程調(diào)度策略,但隨著Linux的不斷演化,進(jìn)程調(diào)度策略也在不斷完善,自Linux內(nèi)核2.6,開始支持實(shí)時(shí)調(diào)度策略。對(duì)于多處理器環(huán)境,每個(gè)CPU有各自的就緒隊(duì)列,隊(duì)列可能包含多種類型的進(jìn)程,與普通進(jìn)程相比,實(shí)時(shí)進(jìn)程擁有更高的優(yōu)先級(jí),具有優(yōu)先獲得CPU的權(quán)力。優(yōu)先級(jí)對(duì)于不同類型的進(jìn)程具有不同的含義,其定義取決于調(diào)度策略。獲取/設(shè)置進(jìn)程調(diào)度策略頭文件

#include<sched.h>函數(shù)原型

int

sched_getscheduler(pid_t

pid);

int

sched_setscheduler(pid_t

pid,int

policy,const

struct

sched_param*param);功能 獲取/設(shè)置進(jìn)程的調(diào)度策略。參數(shù)

Pid:進(jìn)程ID。

policy:調(diào)度策略。

param:調(diào)度參數(shù)地址。返回值

sched_getscheduler函數(shù)成功返回調(diào)度策略,失敗返回-1。參數(shù)policy含義SCHED_OTHER標(biāo)準(zhǔn)時(shí)間片循環(huán)算法(CFS)SCHED_BATCH與SCHED_OTHER類似,但用于批量執(zhí)行SCHED_IDLE與SCHED_OTHER類似,但優(yōu)先級(jí)最低SCHED_FIFO基于先進(jìn)先出的實(shí)時(shí)調(diào)度算法SCHED_RR基于時(shí)間片輪循的實(shí)時(shí)調(diào)度算法SCHED_RESET_ON_FORK創(chuàng)建的子進(jìn)程不繼承父進(jìn)程的調(diào)度策略獲取/設(shè)置進(jìn)程調(diào)度策略頭文件

#include<sched.h>函數(shù)原型

int

sched_getparam(pid_t

pid,struct

sched_param*param);

int

sched_setparam(pid_t

pid,conststruct

sched_param*param);功能 獲取/設(shè)置進(jìn)程的調(diào)度參數(shù)。參數(shù)

pid:進(jìn)程ID。

param:調(diào)度參數(shù)的地址。返回值 成功,返回0,失敗,返回-1。完全公平調(diào)度CFS

CFS(CompletelyFairScheduler)完全公平調(diào)度算法自Linux內(nèi)核2.6引入,通常作為系統(tǒng)的默認(rèn)調(diào)度算法;對(duì)于每一次輪循,每個(gè)進(jìn)程均有獲得處理器的機(jī)會(huì),僅時(shí)間片大小不同,時(shí)間片的大小取決于進(jìn)程的優(yōu)先級(jí)。內(nèi)核為每個(gè)CFS進(jìn)程定義一個(gè)nice值作為優(yōu)先級(jí),其值從-20至19,默認(rèn)情況下,其值為0,nice值表示進(jìn)程獲得時(shí)間的權(quán)重,nice值越小,每次輪循獲得時(shí)間的權(quán)重越大。

CFS通常適用于交互式的個(gè)人電腦和服務(wù)器。獲取/設(shè)置nice值頭文件

#include<sys/resource.h>函數(shù)原型

int

getpriority(intwhich,id_twho);

int

setpriority(intwhich,id_twho,int

prio);功能 獲取/設(shè)置進(jìn)程的優(yōu)先級(jí)級(jí)。參數(shù)

which:進(jìn)程的目標(biāo)類型。

who:進(jìn)程身份。

prio:優(yōu)先級(jí)。返回值 成功返回0,失敗返回-1。實(shí)時(shí)調(diào)度策略

自內(nèi)核2.6起引入了兩種類型的實(shí)時(shí)調(diào)度策略。,它們均基于優(yōu)先級(jí)。內(nèi)核為每個(gè)實(shí)時(shí)進(jìn)程賦予一個(gè)優(yōu)先級(jí),其值從1(低)至99(高),調(diào)度器按優(yōu)先級(jí)從高到低依次獲得CPU,高優(yōu)先級(jí)進(jìn)程優(yōu)先獲得CPU,一旦有更高優(yōu)先級(jí)進(jìn)程就緒,運(yùn)行中的進(jìn)程將立即被更高優(yōu)先級(jí)進(jìn)程搶占。實(shí)時(shí)調(diào)度策略(續(xù))1.基于時(shí)間片輪循的實(shí)時(shí)調(diào)度算法該算法在優(yōu)先級(jí)的基礎(chǔ)上,對(duì)于相同優(yōu)先級(jí)的進(jìn)程,按時(shí)間片輪循。2.基于先進(jìn)先出的實(shí)時(shí)調(diào)度算法該算法在優(yōu)先級(jí)的基礎(chǔ)上,對(duì)于相同優(yōu)先級(jí)的進(jìn)程,按到達(dá)的先后順序依次執(zhí)行。獲取/設(shè)置實(shí)時(shí)進(jìn)程優(yōu)先級(jí)范圍sched_get_priority_min/sched_get_priority_max函數(shù)頭文件

#include<sched.h>函數(shù)原型

int

sched_get_priority_min(intpolicy);

int

sched_get_priority_max(intpolicy);功能 獲取實(shí)時(shí)進(jìn)程優(yōu)先級(jí)的最小/最大值。參數(shù)

policy:調(diào)度策略。返回值 成功返回優(yōu)先級(jí),失敗返回-1。放棄CPU的控制權(quán)sched_yield函數(shù)頭文件

#include<sched.h>函數(shù)原型

int

sched_yield(void);功能 放棄CPU的控制權(quán)參數(shù) 無參數(shù)。返回值 成功,返回0,失敗,返回-1。進(jìn)程的CPU親和力

在多處理器系統(tǒng)中,每個(gè)處理器有各自獨(dú)立的調(diào)度隊(duì)列,為了保持不同隊(duì)列在運(yùn)行期間的負(fù)載均衡,從而發(fā)揮多處理器效率,必要時(shí),進(jìn)程可在不同隊(duì)列間遷移。

對(duì)于時(shí)間敏感的進(jìn)程,可將其綁定至某個(gè)特定處理器,以免因遷移而造成的延期。配置進(jìn)程的親和力

sched_getaffinity/sched_setaffinity函數(shù)頭文件

#include<sched.h>函數(shù)原型

int

sched_getaffinity(pid_t

pid,size_t

cpusetsize,cpu_set_t*mask)

int

sched_setaffinity(pid_t

pid,size_t

cpusetsize,const

cpu_set_t*mask);功能 獲取/設(shè)置進(jìn)程與CPU的綁定關(guān)系。參數(shù)

pid:進(jìn)程ID。

cpusetsize:掩碼字節(jié)數(shù)。

mask:綁定的CPU集合。返回值 成功返回0,失敗返回-1。8.5守護(hù)近程守護(hù)進(jìn)程概述

守護(hù)進(jìn)程是指如同守護(hù)者一般持續(xù)在系統(tǒng)中運(yùn)行的進(jìn)程,守護(hù)進(jìn)程通常具有一下特征。不手控制終端的影響。2.最多存在一個(gè)運(yùn)行實(shí)例。3.必要時(shí)產(chǎn)生日志信息。4.修改配置后無需重啟系統(tǒng)。守護(hù)進(jìn)程的啟動(dòng)方式1.在系統(tǒng)啟動(dòng)時(shí)啟動(dòng)。2.在登錄shell上啟動(dòng)。該方式啟動(dòng)的進(jìn)程會(huì)繼承shell的某些資源,在守護(hù)進(jìn)程初始化階段需作相應(yīng)處理。創(chuàng)建守護(hù)進(jìn)程1.切斷與控制終端的聯(lián)系。創(chuàng)建一個(gè)子進(jìn)程,父進(jìn)程終止,在子進(jìn)程中調(diào)用setsid函數(shù)建立一個(gè)新的會(huì)話,新建會(huì)話未關(guān)聯(lián)控制終端。2.關(guān)閉所有打開的文件關(guān)閉繼承自父進(jìn)程的所有已打開文件。3.設(shè)置根目錄、工作目錄和權(quán)限掩碼重新設(shè)置繼承自父進(jìn)程的根目錄、工作目錄和權(quán)限掩碼。完善守護(hù)進(jìn)程1.處理SIGTERM信號(hào)進(jìn)程結(jié)束前會(huì)收到SIGTERM信號(hào),提醒進(jìn)程作相應(yīng)的善后處理。2.處理SIGHUP信號(hào)利用SIGHUP信號(hào),重新讀取修改后的配置文件。3.僅保留一個(gè)運(yùn)行實(shí)例用文件鎖實(shí)現(xiàn)僅保留一個(gè)運(yùn)行實(shí)例。4.處理產(chǎn)生的日志利用系統(tǒng)提供的日志服務(wù),保存產(chǎn)生的日志信息。處理SIGTERM信號(hào)

在系統(tǒng)關(guān)機(jī)時(shí),所有守護(hù)進(jìn)程會(huì)收到初始化進(jìn)程發(fā)送的SIGTERM信號(hào),通知守護(hù)進(jìn)程在結(jié)束前做好善后處置工作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論