コマンド「/ bin / sh -c ls /」とsh temp.sh(1行ls /のみを含む)の間に、プロセスとサブプロセスのビューに違いはありますか?


0

上記のコマンド実行方法と以下のコードの違いは何ですか? #include int main ( ) { int return_value; return_value = system ( "ls /" ); return return_value; }

回答:


0

system("ls /")shプロセスを生成し、引数-cとを与えますls /。したがって、プログラムの実行とsh -c "ls /"シェルでの入力の主な違いは、最初のケースでは、プログラムを含むプロセスもあるということです。したがって、ls実行中にプロセスツリーをキャプチャできる場合、次のようなものが表示されます。

init───konsole───bash───myprog───sh───ls

の代わりに

init───konsole───bash───sh───ls

exec関数ファミリのいずれかを使用した場合、sh完全に使用することを避け、プログラムをlsユーティリティで置き換えることができます。その場合、次のように表示されます。

init───konsole───bash───ls

プログラムは次のようになります。

int main(int argc, char** argv) {
  return execlp("ls", "ls", "/");
}

オプションbashを介して実行されるコマンド-cが単純なコマンドである場合、多くのシェル(を含む)がこれを自動的に行います。それでも、シェルを単にできるプロセスに置き換える目的でシェルを生成するポイントはほとんどありませんexec

との間には、ファイルを読み取り用に開くために必要なもの以外はほとんど違いがsh -c "ls -l"ありませんsh ls-l.sh


私は、のいずれかを使用した場合のexec関数のファミリを、プロセスツリーは次のようにする必要があります:init───konsole───bash───myprog───ls
user3872279

このプロセスは正しいですか、または誤解していますか?
user3872279 14

@ user3872279いいえ、プロセスをedプロセスにexec 置き換えますexecexec(示されたプログラムを見つけることができないように)作動するのを防止エラーが発生した場合の呼のみを返し。system戻り値とはまったく異なります。
リチ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.