![fork()、exec()、system()がすべて間違っていますか? [閉鎖]](https://linux33.com/image/7190/fork%EF%BC%88%EF%BC%89%E3%80%81exec%EF%BC%88%EF%BC%89%E3%80%81system%EF%BC%88%EF%BC%89%E3%81%8C%E3%81%99%E3%81%B9%E3%81%A6%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
呼び出しを介してシェルコマンドを実行するCコードを書く場合、これが最善の方法ではない可能性があり、使用する方が良いかもしれませんが、経験豊富なCプログラマーsystem()
が分岐と実行を介してシェルを生成するのが間違っていると言った理由わかりました。しかし、彼はなぜそのように答えなかった。教えてもらえますか?私のコードを誤解している可能性があります。exec
fork
カスタマイズされた新しいシェルプロンプトに入力できるパイプを使用しfork
て実行します。exec
彼は最高のシェルがのプログラムも実装できるという意味ですか/bin
?経験豊富なCプログラマーの言葉を引用しましたが、彼がなぜ私にこのようなことを言ったのか理解できません。
IMHO、シェルでCコードを使用して複数のプログラムをフォークしてパイプすることは非常に間違っています。
答え1
シェルを呼び出さずに直接プログラムを実行する2つの主な理由は次のとおりです。
- パフォーマンス:Cプログラムから呼び出されるほとんどのプログラムは、シェルよりはるかに小さい可能性が高いため、より速く起動します。
- 環境制御:環境変数の追加層を処理すると、構成とトラブルシューティングがより複雑になる可能性があります。