作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] 如何結束fork產生的子行程!!
時間Sun Mar 29 17:03:20 2009
※ 引述《ppp168p (時光暫停)》之銘言:
: 大家好:
: 我利用fork指令後,利用exec指令執行外部指令播放一首歌
: 目前我利用system( kill childpid<-代表子行程id),結束掉這子行程
: ,但是當結束子行程後,我利用ps -ax 檢查目前系統存在的process
: 我發現被kill的子行程變成了 zombie的狀態!!
: 我想要請問一下大家~我該怎樣子殺掉這子行程且不會變成zombie狀態!
1. 用 kill(child_pid, SIGKILL) 即可
不需要 system
2. 用 waitpid 來回收結束的 child process status
少了這一步就會產生 zombie process
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.28.57
推 Lwms:謝謝賜教 03/29 17:04
推 ppp168p:可以請問該怎樣子用waitpid回收child process status 03/29 17:57
推 LPH66:fork的回傳值在父行程中是子行程的pid 丟給waitpid即可 03/29 17:59
推 ppp168p:waitpid後面還有兩個參數該怎樣下呢!!? 03/29 18:02
推 ppp168p:google後我找到 waitpid(child_pid,&stat,WNOHANG); 03/29 18:05
推 ppp168p:這一行要接在kill(child_pid, SIGKILL)下面嗎@@? 03/29 18:10
→ ppp168p:我目前是直接接在下面~但結果也是一樣@@" 03/29 18:11
→ ppp168p:26745 pts/1 Z+ 0:00 [aplay] <defunct> 03/29 18:12