1)孤兒程序(orphan process):父程序已亡,即父程序執行結束,但是子程序未結束的程序。
孤兒程序的父程序是1號程序-即init程序。父程序死亡之後終端釋放。此時不能用ctrl-c結束程序。
#include #include #include #include int main()else if(pid == 0)
}else
return 0;
}
在5s之後,父程序死亡,子程序的father id為1。編譯和執行結果如下:
可以使用命令ps檢視當前的程序,然後kill 29661結束子程序的執行。也可以直接關閉該terminal。
2)殭屍程序(zombie process):程序已經結束了,但是程序占用的資源沒有完全**(有標記存在)。
子程序死掉之後,父程序沒有**它所占用的資源。導致子程序成為殭屍程序。父程序可用wait**子程序的資源。
當父程序一直在執行,子程序執行提前結束,但是父程序沒有用wait(&status)或wait(0)**子程序的資源時,子程序成為殭屍程序。當程式結束時,系統會自動**殭屍程序占用的資源。
#include #include #include #include int main()else if(pid == 0)
}else
}return 0;
}
編譯和執行結果如下:
此時子程序已經結束,只有父程序在列印資訊,可以用ctrl-c來釋放終端。此時開啟另外乙個終端:
可以看到fork5有兩個程序,其中殭屍程序用標註。解決方法是在父程序中加入wait(0)或wait(&status).
3)守護程序/精靈程序(daemon process)
守護程序是個特殊的孤兒程序,這種程序脫離終端,在後台執行。不接收來自終端的任何訊號。
殭屍程序和孤兒程序
殭屍程序 乙個子程序在其父程序還沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。孤兒程序 乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序 程序號為1 所收養,並由init程序對它們完成狀態收集工作。殭屍程序將會導致資源...
殭屍程序和孤兒程序
什麼是殭屍程序?乙個子程序在其父程序沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。如果其父程序還存在而一直不呼叫wait,則該殭屍程序將無法 等到父程序結束後,會被init 驗證 include include includeint main 3秒後查詢其程序資訊 通過上...
殭屍程序和孤兒程序
殭屍程序和孤兒程序 在unix系統程式設計中,常常會碰到兩個概念 僵死程序和孤兒程序 僵死程序 在unix程序模型中,程序是按照父程序產生子程序,子程序產生子子程序這樣的方式建立出完成各項相互協作功能的程序的。當乙個程序完成它的工作終止之後,它的父程序需要呼叫wait 或者waitpid 系統呼叫取...