Linux中fork的使用注意事項

cyberrusher發表於2012-02-04

  Linux中fork函式用於在一個程式中建立一個新的子程式,先看看其定義:

    #include<unistd.h>  

    #include<sys/types.h>

 函式定義:   pid_t    fork( void);

    pid_t 是一個巨集定義,其實質是int, 被定義在#include<sys/types.h>中,雖然fork是被呼叫了一次,但是這個函式卻會返回兩次,

在子程式中,這個函式會返回0,在父程式中這個函式返回的是子程式的程式id(大於0),子程式是對父程式的複製(duplicate)

而不是共享空間。

當一個父程式fork了一個子程式的時候是需要等待這個子程式結束後將這個子程式的資源回收的,但是一般情況下如果parent程式

並沒有等待子程式結束,自己先提前結束的話,init程式會將child程式接管,並且將其資源回收,使用的函式是waitpid

在子程式結束的時候核心會向父程式傳送SIGCHLD訊號,如果父程式將這個訊號遮蔽掉,然後父程式並沒有等待子程式結束那麼

子程式就會變為殭屍程式.(Z)


【參考資料】

1:http://baike.baidu.com/view/1952900.htm

2:man手冊

3:http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part2/

4:http://hi.baidu.com/q%C4%AB%B9%E6%B3%D8q/blog/item/feef2e23a6c15deed6cae2c8.html

5:http://wenku.baidu.com/view/fdf2be956bec0975f465e2b4.html


相關文章