使用system()执行二进制文件和使用fork / execvp的组合有什么区别。
是否存在任何安全性/可移植性/性能差异。
答案 0 :(得分:13)
系统还使用fork
/ exec
...组合。如果您自己fork
/ exec
,则可以与正在运行的流程并行执行,同时system
阻止(包括wait
)。
system
执行命令不是直接命令,而是通过shell(使setuid位出现问题)和system
阻塞/忽略某些信号(SIGINT,SIGCHILD,SIGQUIT)。
答案 1 :(得分:7)
是的,system()
通过shell运行命令,而exec()
直接运行命令。当然,引入shell会出现bug和漏洞。
编辑:当然,the man page提供了更多详细信息。
答案 2 :(得分:6)
system()
将fork()
/ exec()
shell,然后shell将fork()
/ exec()
您要启动的程序。
所以system()
的重量是fork()
/ exec()
答案 3 :(得分:3)
system()适用于Windows,但fork()不适用。
除非您使用兼容层,例如Cygwin,但即使这样,分叉也可能非常昂贵。
答案 4 :(得分:2)
还有popen(),它类似于system(),但允许读取子的输出并提供输入