下面資料是關(guān)于linux c 關(guān)于進(jìn)程等待的內(nèi)容,希望能對(duì)碼農(nóng)有較大好處。
#include <sys/types.h>
#include <stdio.h>
#include <sys/wait.h>
void check_exit(int status);
main()
{
pid_t pid;
int status;
if((pid = fork()) < 0)
{
printf("fork error!!n");
exit(0);
}
else if(pid == 0)
{
printf("child process exitn");
exit(0);
}
else
{
if(wait(&status) != pid)
{
printf("wait error!!");
exit(0);
}
check_exit(status);
}
}
void check_exit(int status)
{
if(WIFEXITED(status))
printf("eixtn");
else if(WIFSIGNALED(status))
printf("killed by signaln");
else if(WIFSTOPPED(status))
printf("stopped by signaln");
else if(WIFCONTINUED(status))
printf("continued");
}
等待進(jìn)程改變其狀態(tài)。所有下面哪些調(diào)用都被用于等待子進(jìn)程狀態(tài)的改變,獲取狀態(tài)已改變的子進(jìn)程信息。狀態(tài)改變可被認(rèn)為是:1.子進(jìn)程已終止。2.信號(hào)導(dǎo)致子進(jìn)程停止執(zhí)行。3.信號(hào)恢復(fù)子進(jìn)程的執(zhí)行。在子進(jìn)程終止的情況下,wait調(diào)用將允許系統(tǒng)釋放與子進(jìn)程關(guān)聯(lián)的資源。如果不執(zhí)行wait,終止了的子進(jìn)程會(huì)停留在"zombie"狀態(tài)。如果發(fā)現(xiàn)子進(jìn)程改變了狀態(tài),這些調(diào)用會(huì)立即返回。反之,調(diào)用會(huì)被阻塞直到子進(jìn)程狀態(tài)改變,或者由信號(hào)處理句柄所中斷(假如系統(tǒng)調(diào)用沒(méi)有通過(guò)sigaction的SA_RESTART標(biāo)志重啟動(dòng))。wait系統(tǒng)調(diào)用掛起當(dāng)前執(zhí)行中的進(jìn)程,直到它的一個(gè)子進(jìn)程終止。waitpid掛起當(dāng)前進(jìn)程的執(zhí)行,直到指定的子進(jìn)程狀態(tài)發(fā)生變化。默認(rèn),waitpid只等待終止?fàn)顟B(tài)的子進(jìn)程,但這種行為可通過(guò)選項(xiàng)來(lái)改變。waitid系統(tǒng)調(diào)用對(duì)于等待哪個(gè)子進(jìn)程狀態(tài)改變提供了更精確的控制。子進(jìn)程已終止,父進(jìn)程尚未對(duì)其執(zhí)行wait操作,子進(jìn)程會(huì)轉(zhuǎn)入“僵死”狀態(tài)。內(nèi)核為“僵死”狀態(tài)的進(jìn)程保留最少的信息量(進(jìn)程標(biāo)識(shí),終止?fàn)顟B(tài),資源使用信息),過(guò)后父進(jìn)程執(zhí)行wait時(shí)可以獲取子進(jìn)程信息。只要僵死的進(jìn)程不通過(guò)wait從系統(tǒng)中移去,它將會(huì)占據(jù)內(nèi)核進(jìn)程表中的一個(gè)欄位。如果進(jìn)程表被填滿(mǎn),內(nèi)核將不能再產(chǎn)生新進(jìn)程。如果父進(jìn)程已終止,它的僵死子進(jìn)程將由init進(jìn)程收養(yǎng),并自動(dòng)執(zhí)行wait將它們移去。wait(等待子進(jìn)程中斷或結(jié)束)
#include<sys/types.h>
#include<sys/wait.h>
函數(shù)說(shuō)明wait()會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行(掛起父進(jìn)程),直到有信號(hào)來(lái)到或子進(jìn)程結(jié)束。如果在調(diào)用wait()時(shí)子進(jìn)程已經(jīng)結(jié)束,則wait()會(huì)立即返回子進(jìn)程結(jié)束狀態(tài)值。子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù)status返回,而子進(jìn)程的進(jìn)程識(shí)別碼也會(huì)一快返回。如果不在意結(jié)束狀態(tài)值,則參數(shù)status可以設(shè)成NULL。如果調(diào)用wait的進(jìn)程沒(méi)有子進(jìn)程則會(huì)調(diào)用失敗,子進(jìn)程的結(jié)束狀態(tài)值請(qǐng)參考waitpid()如果執(zhí)行成功則返回子進(jìn)程識(shí)別碼(PID),如果有錯(cuò)誤發(fā)生則返回-1。失敗原因存于errno中。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:linuxc關(guān)于進(jìn)程等待的代碼-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)于:http://www.rwnh.cn/article14/pocge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站收錄、企業(yè)網(wǎng)站制作、全網(wǎng)營(yíng)銷(xiāo)推廣、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容