有關Linux下父子程序內容

2021-04-29 10:47:37 字數 941 閱讀 9975

1 . 父程序可以利用wait()/ waitpid()等待子程序的結束,避免僵死子程序的產生,當然也可以迴圈的wait()/ watipid()來等待所有的子程序的結束;最好可以用法是,在子程序結束時,會向父程序傳送的sigchld訊號,父程序通過 signal()/sigaction()來響應子程序的結束.具體例項可參考:testfork4.c,關鍵**如下:

2 . 當父程序結束時,還未結束的子程序就會成為孤兒程序,系統會把init程序作為其父程序;從而使得子程序在父程序結束後,繼續執行.

3 . 對於父子程序共存時,產生相關訊號如sigint時,父子程序都能接受到此訊號,只是先由父程序響應,再由父程序把此訊號傳遞給子程序;但要注意的地方 是:(1)如父程序沒有對該訊號程序自定義處理,則父子程序都接受訊號的預設處理,eg:在沒有對sigint程序自定義處理時,產生此訊號,由父子程序 都馬上中止;(2)如父程序自定義了訊號處理方法,則子程序一樣接受此訊號和其訊號處理方法;此時,若子程序成為孤兒程序,則此時的子程序不會再接受此信 號和其訊號處理方法.具體例項可參考 testfork6.c,關鍵**如下:

4 . 在建立子程序時,核心將父程序的很多內容拷貝給子程序,同時在呼叫fork()後,父子程序共享正文部分(其實也相當於拷貝);注意拷貝兩字,所以子程序中修改的東東對父程序沒有作用,除非利用父子程序通訊方法;因此,要特別注意子程序的**編寫,如動態空間的釋放問題,記憶體訊號修改問題;具體例項可參考:testfork1.c,關鍵**如下:

結果:(hello 為gets(buf)語句)

hello

child:xiaofeng

parent:hello

5 . 補充下有關訊號的幾個結論:

(1)訊號處理有三種模式,一為預設處理方式;二為訊號忽略方式;三為自定義訊號處理方法;

(2)  當乙個程序睡眠在可中斷優先順序時,程序捕獲的訊號將中斷程序的睡眠

2009-06-12 13:19:43

有關Linux下父子程序之間的幾個思考與結論

父程序可以利用wait waitpid 等待子程序的結束,避免僵死子程序的產生,當然也可以迴圈的wait watipid 來等待所有的子程序的結束 最好可以用法是,在子程序結束時,會向父程序傳送的sigchld訊號,父程序通過 signal sigaction 來響應子程序的結束.具體例項可參考 t...

Linux 父子程序與fork

每個程序都有乙個非負整數表示的唯一程序id,如交換程序 即排程程序 id為0,init程序id為1,頁守護程序id為2 原型如下 fork函式被呼叫一次,但返回兩次,兩次返回的區別就是子程序返回的是0,父程序返回的新子程序的id 子程序是父程序的副本,獲得了父程序資料空間 堆和棧的副本 父子程序並不...

Linux程序分析(二) 父子程序與程序組

ps命令一般用來顯示終端資訊和程序資訊,執行命令ps eo pid,comm,cmd可以輸出所有程序的資訊,e代表所有程序,後面三個引數是需要輸出的資訊。第一列pid是乙個整數,每乙個程序都有乙個唯一的pid來代表自己的身份,程序也可以根據pid來識別其他的程序。第二列command是這個程序的簡稱...