[問題] wait & waitpid

看板C_and_CPP作者 (非常念舊)時間2年前 (2021/10/26 23:54), 編輯推噓1(103)
留言4則, 2人參與, 2年前最新討論串1/1
大家晚安 我有一段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

10/27 09:31, 2年前 , 1F
此處要用 waitpid 才對
10/27 09:31, 1F

10/27 09:34, 2年前 , 2F
在 wait 之前有任何 unwaited child process 全部都會
10/27 09:34, 2F

10/27 09:35, 2年前 , 3F
算在 wait 頭上被接收,包括但不限於你列出來的部份code
10/27 09:35, 3F

10/28 21:12, 2年前 , 4F
收到各種 signal wait 都會跳出來,處理超麻煩的
10/28 21:12, 4F
文章代碼(AID): #1XU2IqGE (C_and_CPP)