進(jìn)程管理


進(jìn)程(process)通??杀粴w為父進(jìn)程和子進(jìn)程。

父進(jìn)程負(fù)責(zé)創(chuàng)建和結(jié)束子進(jìn)程。子進(jìn)程調(diào)用exit()并不能立即結(jié)束,會(huì)發(fā)SIGCHLD信號給父進(jìn)程,以便父進(jìn)程對資源進(jìn)行回收。

在子進(jìn)程結(jié)束前,如果父進(jìn)程已經(jīng)結(jié)束,那也沒有問題。你的子進(jìn)程就變成了孤兒進(jìn)程或者守護(hù)進(jìn)程。系統(tǒng)init進(jìn)程會(huì)充當(dāng)父進(jìn)程的角色對子進(jìn)程進(jìn)行管理和回收。

父進(jìn)程可以采用wait或waitpid等待已結(jié)束的子進(jìn)程退出。如果父進(jìn)程沒有調(diào)用wait或waitpid來等待子進(jìn)程退出。而且父進(jìn)程一直運(yùn)行,就會(huì)產(chǎn)生僵尸進(jìn)程。這就是一個(gè)應(yīng)該被避免的問題。

通常父進(jìn)程可以采用signal的方式來等待和回收子進(jìn)程結(jié)束。示例如下:


void
sig_chld(int signo)
{
    pid_t   pid;
    int     stat;

    while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
        printf("child %d terminated\n", pid);
    return;
}

int main()
{
    Signal(SIGCHLD,sig_chld);
    ....
    if((child = fork()) == 0)
    {
    }
    else
    {
    }
    ....
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Linux 進(jìn)程管理與程序開發(fā) 進(jìn)程是Linux事務(wù)管理的基本單元,所有的進(jìn)程均擁有自己獨(dú)立的處理環(huán)境和系統(tǒng)資源,...
    JamesPeng閱讀 2,597評論 1 14
  • 進(jìn)程管理 進(jìn)程相關(guān)的基本概念 進(jìn)程是多處理程序中作為資源分配和獨(dú)立運(yùn)行的基本單位,進(jìn)程實(shí)體由程序段、數(shù)據(jù)段、PCB...
    顏洛濱閱讀 538評論 1 2
  • 今天:進(jìn)程結(jié)束 -fork() /exit退出進(jìn)程/wait()父進(jìn)程等待子進(jìn)程/vfork()Unix/Linu...
    vera姐姐閱讀 416評論 0 0
  • Linux進(jìn)程管理原理 Linux的進(jìn)程管理,就是對硬件各資源進(jìn)行分配、調(diào)度、銷毀等工作,其主要部件的管理為:CP...
    魏鎮(zhèn)坪閱讀 1,501評論 0 6
  • “選擇我所愛的,愛我所選擇的”。上學(xué)時(shí)不知從哪兒第一次看到了這句話,只因?yàn)樗幕匚男问?,便趕時(shí)髦的將它記作了自己的...
    夢婷子閱讀 686評論 0 1

友情鏈接更多精彩內(nèi)容