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