难道 fork()、exec() 和 system() 都错了吗?

难道 fork()、exec() 和 system() 都错了吗?

我明白为什么如果我编写通过调用执行 shell 命令的 C 代码,那么它可能不是最佳实践,system()而且最好使用execfork但后来一位非常有经验的 C 程序员告诉我,通过分叉和执行来创建 shell 是错误的,但他从来没有回答过为什么。你能告诉我吗?我可能会误解我的代码定制新外壳使用forkexec执行我可以在提示符下输入的管道。

他的意思是说最好的 shell 也可以实现来自 的程序/bin吗?我引用了一位经验丰富的 C 程序员的话,但我不明白他为什么告诉我这一点。

恕我直言,在 shell 中使用 C 代码来分叉和管道传输多个程序是非常错误的。

答案1

不调用 shell 直接运行程序的两个主要原因是:

  • 性能:您从 C 程序调用的大多数程序可能比 shell 小得多,这使得它们启动得更快。
  • 环境控制:处理额外的环境变量层可能会使配置和故障排除变得更加复杂。

相关内容