Linux中fork的使用注意事項
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
相關文章
- fork 和 vfork 使用的注意事項和 system() 函式的替代函式
- 快取使用中的注意事項快取
- C中memcpy使用注意事項memcpy
- ThinkPHP中CURD where的使用注意事項PHP
- 安裝linux中的注意事項(轉)Linux
- Oracle使用*的注意事項Oracle
- ListView中getChildAt(index)的使用注意事項ViewLDAIndex
- 使用parallel注意事項Parallel
- 2. Go中defer使用注意事項Go
- 使用c++中string類的注意事項C++
- Linux zabbix 配置注意事項Linux
- 使用Google Fonts注意事項Go
- Go 切片使用注意事項Go
- 使用CocosBuilder注意事項UI
- removeChild使用時注意事項REM
- Linux 中的 fork() 函式例項解析Linux函式
- 使用Vue.js的注意事項Vue.js
- 使用HTTP的三個注意事項HTTP
- 使用MyBatis的注意事項有哪些MyBatis
- 使用ProForm的useRef()物件的注意事項ORM物件
- Linux中單引號和雙引號的使用方法及注意事項!Linux
- JavaScript 中 this 的工作原理以及注意事項JavaScript
- JavaScript中this的工作原理以及注意事項JavaScript
- delphi中的bpl開發注意事項
- 網站設計中的注意事項網站
- Go 中修改切片副本的注意事項Go
- TCP使用注意事項總結TCP
- 萬兆網路卡使用注意事項
- MySQL半同步使用注意事項MySql
- Guava HashMultimap使用及注意事項Guava
- setbuf函式使用注意事項函式
- php getallheaders使用注意事項PHPHeader
- 使用直方圖注意事項直方圖
- 例項詳解 Linux 中的 fork() 函式Linux函式
- ip代理軟體的使用注意事項
- 說點JSON使用的注意事項JSON
- cookie的使用方法以及注意事項Cookie
- 在 HttpHandler 中使用 Session 的注意事項HTTPSession