看板 C_and_CPP 關於我們 聯絡資訊
大家晚安 我有一段code exe_command(cmd); //cmd 做 sed -i /server/d /etc/ntp.conf ... ... ... exe_command(cmd) //cmd 做 echo server xxxx.xxx.xxx >> /etc/ntp.conf 用測試程式執行一兩次發現 ntp.conf 經常是空的,把前面 command 刪除則正常加入 但前面的command要保留不能刪除 看進去 exe_command: pid = fork(); if(pid < 0) {} else if(pid > 0) { wait(&staus); //----->這邊改成waitpid(pid, &staus, 0)就可以解了 if(status) { ERR(...); return -1; } } else { if(execvp(...) < 0) exit(EXIT_FALURE); exit(EXIT_SUCCESS); } 這之間的差異是wait只要是任何一個子process結束後就會讓wait離開 waitpid 是要等待一個特定的子process結束才會離開 但還是想不透說是甚麼樣的timing這問題才會產生? 原本想說後面的子行程先執行才執行前面的,才會造成。但wait一定是block住才能 進行下一個command阿... 謝謝指教QQ        -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.78.101 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1635263668.A.40E.html
Schottky: 此處要用 waitpid 才對 10/27 09:31
Schottky: 在 wait 之前有任何 unwaited child process 全部都會 10/27 09:34
Schottky: 算在 wait 頭上被接收,包括但不限於你列出來的部份code 10/27 09:35
Lipraxde: 收到各種 signal wait 都會跳出來,處理超麻煩的 10/28 21:12
gn00618777: 我這段改成waitpid()的func會造成許多zombie... 11/02 21:19