system函式的重構的思考
阿新 • • 發佈:2018-12-21
1.system()函式實現時為何要阻塞SIGCHLD訊號
https://www.cnblogs.com/lidabo/p/5344777.html
2.waitpid與SIGCHLD的關係:
https://blog.csdn.net/liuxingen/article/details/38350347
主程序可以直接呼叫waitpid or wait來回收子程序的結束狀態,不一定非得通過SIGCHILD訊號處理函式,也就是說waitpid or wait不是依靠SIGCHLD訊號是否到達來判斷子程序是否結束.但是如果主程序除了回收子程序狀態以外還有其他的業務需要處理那麼最好是通過SIGCHILD訊號處理函式來呼叫waitpid or wait,因為這是非同步的操作.
自己的話來說:
- waitpid與SIGCHLD無關,waitpid可以阻塞的等待子程序結束;
- 可以通過SIGCHLD的訊號處理函式,在訊號處理函式裡用waitpid來實現system的非同步操作;
3.使用system的坑:
http://blog.sina.com.cn/s/blog_8043547601017qk0.html
因使用system之前的SIGCHLD的預設為 SIG_IGN導致waitpid顯示no child process,出現問題。