簡體   English   中英

使用fork / execvp和系統調用之間的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM