2011年9月28日 星期三

[Linux] Fork & exec

Fork 會把除了process id 之外, 整個program 都複製一份給child process (先不管copy on write), 在child process 執行exec之後, 原本program的資料就會lost, 全部取代成新的program, 但是fd不會自動close, 除非你有設定close-on-exec, 不然要不你需要手動close, 或是用來當作跟parent process溝通的管道.

p.s 當child process在處理NFS之類的fd, 要關掉fd, 有時會需要很長得時間才關得掉 (NFS server unreachable or 你改了ethernet address), 似乎這時候process會在D (uninterruptable) 這個state 停留非常久的時間...簡單來說, 在處理NFS這種網路的fd, 需要注意以免被watchdog

Reference
http://en.wikipedia.org/wiki/Fork-exec 
http://stackoverflow.com/questions/1643304/how-to-set-close-on-exec-by-default