![难道 fork()、exec() 和 system() 都错了吗?](https://linux22.com/image/7190/%E9%9A%BE%E9%81%93%20fork()%E3%80%81exec()%20%E5%92%8C%20system()%20%E9%83%BD%E9%94%99%E4%BA%86%E5%90%97%EF%BC%9F%20.png)
我明白为什么如果我编写通过调用执行 shell 命令的 C 代码,那么它可能不是最佳实践,system()
而且最好使用exec
,fork
但后来一位非常有经验的 C 程序员告诉我,通过分叉和执行来创建 shell 是错误的,但他从来没有回答过为什么。你能告诉我吗?我可能会误解我的代码定制新外壳使用fork
和exec
执行我可以在提示符下输入的管道。
他的意思是说最好的 shell 也可以实现来自 的程序/bin
吗?我引用了一位经验丰富的 C 程序员的话,但我不明白他为什么告诉我这一点。
恕我直言,在 shell 中使用 C 代码来分叉和管道传输多个程序是非常错误的。
答案1
不调用 shell 直接运行程序的两个主要原因是:
- 性能:您从 C 程序调用的大多数程序可能比 shell 小得多,这使得它们启动得更快。
- 环境控制:处理额外的环境变量层可能会使配置和故障排除变得更加复杂。