Shell-Script
fork()、exec() 和 system() 都錯了嗎?
我理解為什麼如果我編寫通過呼叫來執行 shell 命令的 C 程式碼可能不是最佳實踐,
system()
而且使用起來更好exec
,fork
但是後來一位非常有經驗的 C 程序員告訴我,通過分叉和執行來製作 shell 是錯誤的,但是他從來沒有回答為什麼。你能告訴我嗎?我的程式碼可能會誤解我的自定義新 shell用途fork
和exec
執行可以在提示符下輸入的管道。他的意思是最好的shell也實現了程序
/bin
嗎?我引用了經驗豐富的 C 程序員,但我不明白他為什麼告訴我這個。恕我直言,在你的 shell 中使用分叉和管道的 C 程式碼是完全錯誤的。
不呼叫 shell 直接執行程序的兩個主要原因是:
- 性能:從 C 程序呼叫的大多數程序可能比 shell 小得多,這使得它們啟動得更快。
- 環境控制:處理要處理的附加環境變數層可能更複雜,配置和故障排除。