我一直在阅读它的手册,但还没有成功地弄清楚它是如何工作的。调用system()函数时,会fork出一个新的子进程并在其中执行shell二进制文件吗?虽然这可能是一个愚蠢的猜测。
是的,system() 实质上是一个 fork() 和 exec() "sh -c" 用于传递命令字符串。可以在这里找到一个示例实现(来自最近从glibc分支出的 eglibc)这里。
是的,system("foo bar") 等同于 execv("/bin/sh", ["sh", "-c", "foo bar"])。