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

foo*_*foo 13 c c++ unix linux

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

是否有任何安全性/可移植性/性能差异.

flo*_*olo 14

系统还使用fork/ exec...组合.如果你fork/ exec你自己,你可以到你的运行过程中执行并行,同时system阻止(包括wait).也system执行命令不直接,但通过shell(这会产生setuid位问题)和system阻止/忽略某些信号(SIGINT,SIGCHILD,SIGQUIT).


unw*_*ind 7

是的,system()通过shell exec()运行命令,同时直接运行命令.当然,引入shell会出现bug和漏洞.

编辑:当然,手册页提供了更多细节.


qrd*_*rdl 6

system()fork()/ exec()shell,然后shell将fork()/ exec()您要启动的程序.

所以system()重量是fork()/的两倍exec()