waitpid函式原始碼

2021-06-28 11:40:11 字數 611 閱讀 7526

int

sys_waitpid

(pid_t

pid,

unsigned

long

*stat_addr

,int

options

)//掛起當前程序,直到pid指定的子程序退出終止或者收到要求終止該程序 的訊號 ,或者需要呼叫 乙個訊號處理函式

elseif(

!pid

)elseif(

pid !=

-1)//以下的語名定為要找到的程序

switch((

*p)-

>

state)}

if(flag

)return

-echild;}

//說明:line 190行的重新任務排程,是很有必要的,這樣一任務排程,父程序就

//有可能暫時不執行,轉讓於子程序加以執行,這樣就有可能子程序執行結束,

//當輪到父程序執行時,正好執行if (!(current->signal &= ~(1<<(sigchld-1))))語句,

//也就是說能夠收到子程序傳過來的sigchld訊號,從而返回-eintr(4),

//也就是等待到了子程序的結束

wait函式和waitpid函式

1.殭屍程序 說明子程序結束但是沒有完全釋放記憶體 在核心中的task struct沒有釋放 該程序就會成為殭屍程序 當殭屍程序的父程序結束後就會被init程序 1號程序 接管,最終被 殭屍程序的危害 如果你不處理殭屍程序的話,那麼保留的那段資訊就不會釋放,其程序號就會一定被占用,但是系統所能使用的...

wait函式和waitpid函式

1 wait函式 當乙個程序結束時,會關閉所有的檔案描述符,釋放所有的記憶體空間,但依然儲存其pcb,核心在pcb中儲存著一些資訊。如果是正常退出,則會儲存退出狀態。如果是異常終止,則儲存是哪個訊號終止了該程序。父程序通過呼叫wait 或者waitpid 函式,來獲取這些資訊,之後徹底清除改程序。只...

strtok函式原始碼

今天用到strtok時,總感覺怪怪的,為啥第二次呼叫第乙個引數要用null,難道是函式內部儲存了當前的狀態,假如這樣的話,那就不能對多個串交叉呼叫strtok了,而且儲存這個狀態的不是全域性變數就是static變數。於是看了他的原始碼,有幾個不同的版本,思想是一樣的。感覺寫的挺巧妙的,深深的折服這些...