[英]Difference between using fork/execvp and system call
使用system()執行二進制文件和使用fork / execvp的組合有什么區別。
是否有任何安全性/可移植性/性能差異。
系統還使用fork
/ exec
...組合。 如果您自己執行fork
/ exec
,則可以在運行進程並行執行,而system
阻塞(包括wait
)。 system
執行命令不是直接的,而是通過shell(這會產生setuid位問題)和system
塊/忽略某些信號(SIGINT,SIGCHILD,SIGQUIT)。
是的, system()
通過shell運行命令,而exec()
直接運行命令。 當然,引入shell會出現bug和漏洞。
編輯:當然, 手冊頁提供了更多細節。
system()
將fork()
/ exec()
shell,然后shell將fork()
/ exec()
你想要啟動的程序。
所以system()
重量是fork()
/ exec()
兩倍
system()適用於Windows,但fork()不適用。
除非你使用兼容層如Cygwin,但即使這樣,fork也可能非常昂貴。
還有popen(),它類似於system(),但允許讀取子的輸出並提供輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.