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