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

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

有没有安全/可移植性/性能差异?

Solutions Collecting From Web of "使用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这样的兼容层,但是即使如此,叉子也可能非常昂贵。

还有popen(),它就像system(),但是允许读取孩子的输出并提供输入