使用fork / execvp和系统调用之间的区别

时间:2008-11-20 09:37:44

标签: c++ c linux unix

使用system()执行二进制文件和使用fork / execvp的组合有什么区别。

是否存在任何安全性/可移植性/性能差异。

5 个答案:

答案 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(),但允许读取子的输出并提供输入