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變數。於是看了他的原始碼,有幾個不同的版本,思想是一樣的。感覺寫的挺巧妙的,深深的折服這些...