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
沒有留言:
張貼留言