作者gn00618777 (非常念旧)
看板C_and_CPP
标题[问题] wait & waitpid
时间Tue Oct 26 23:54:23 2021
大家晚安
我有一段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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1635263668.A.40E.html
1F:推 Schottky: 此处要用 waitpid 才对 10/27 09:31
2F:→ Schottky: 在 wait 之前有任何 unwaited child process 全部都会 10/27 09:34
3F:→ Schottky: 算在 wait 头上被接收,包括但不限於你列出来的部份code 10/27 09:35
4F:→ Lipraxde: 收到各种 signal wait 都会跳出来,处理超麻烦的 10/28 21:12
5F:→ gn00618777: 我这段改成waitpid()的func会造成许多zombie... 11/02 21:19