Stdinとstdoutは、複数のプロセスがユーザーから入力を受け取るために共有する単一のファイルです。それでOSは、特定のプログラムに与えられた入力だけが、プログラムよりも標準で見えることをどうやって確認しますか?すべてのプロセス間で共有されている標準入力/標準出力(同じ論理名を持ちながら)stdinとstdoutはプロセスとどのようにユニークになっていますか?
1
A
答えて
3
あなた仮定はせいぜい間違っです。
stdin
/stdout
は、特定のプロセスを開始したプロセスによって転送される(または初期化される)オープンファイルの論理名です。実際には、標準のfork-and-execパターンでは、これらの設定は、execが呼び出される前に、新しいプロセス(のフォークの後)ですでに発生している可能性があります。
stdin
/stdout
は通常、親から継承されます。したがって、ある特定のファイル番号に対してstdin
および/またはstdout
を共有するプロセスグループが存在します。
また、ファイル記述子がパイプの側面である可能性があるため、ファイルシステム(またはデバイスノード)からのファイルを既知の標準チャネルにリンクする必要はありません(考慮事項にはstderr
も含める必要があります)。セットアップの
通常の方法は次のとおりです。
- 親(例えばシェル)
fork
- フォークプロセス(子)を呼び出している環境、標準I/Oチャネルと何かを設定しています。
- この場合、子プロセスは
exec
を実行して、実行するターゲットイメージにプロセスをオーバーレイします。
セットアップ時には、既存のチャンネルを維持するか、新しいチャンネルに置き換えます。 pipe
を作成し、エンドポイントを適切にリンクします。この方法
(つまり単純化の説明ではフォーク前に発生する必要があるパイプを作成し、正直に言うと)、プロセスのほとんどは、独自のI/Oチャネルを持っています。
それにも関わらず、複数のプロセスは、それらが(への有効なファイル記述子を持っている)に接続されているチャネルに書き込むことができます。各ジャンクのデータを読むとき(通常、端末またはファイルを含むブロックを含む行)は、単一のリーダーだけが読み取っています。あなたは、いくつかの(ランニング)を持っているのであれば標準入力などの端末からの読み込み処理(S)他は全くタイピングは表示されませんが、一つだけは、あなたの入力を読み込みます。
関連する問題
- 1. pipe子プロセスnode.jsのブラウザーにstdout&stdin&browserify
- 2. STDIN/STDOUTによるPythonによる外部プロセスの開始と制御
- 3. ログプロセス 'STDINとSTDOUT
- 4. stdout/stdinとパラメータ
- 5. プロセスは複数のstdoutとstdinを持つことができますか?
- 6. stderr、stdout、stdinをパイプにリダイレクトするとプロセスが実行されない
- 7. プロセスのカスタムルートはどのようになっていますか?
- 8. LinuxデーモンとSTDIN/STDOUT
- 9. stdinとstdoutを使って同じcプログラムにパイプする
- 10. stdinとstdoutをnetcatにリダイレクトする
- 11. Pythonを使ってstdin/stdoutをPerlスクリプトに移植するにはどうすればいいですか
- 12. stdinとstdoutのリダイレクトstdinが最初に終了する場所
- 13. execdedプロセスからstdin/stdoutをPerlのパイプにリダイレクト
- 14. GDB/MIはstdinとstdoutをファイルにリダイレクトします
- 15. stdin/stdoutとQDataStreamを使ったQProcessとの通信
- 16. あるプロセスのstdoutを別のプロセスのstdinにリダイレクトする方法はありますか?
- 17. プロセスのstdoutとstderrを同じハンドルにパイプするにはどうすればよいですか?
- 18. すべてのプロセスに独自のstdin、stdout、およびstderrがありますか?
- 19. elf-loaderはstderrとstdoutのアドレスをどのように知っていますか
- 20. stdinとstdoutをJavaでリダイレクトする
- 21. サブプロセスのstdinとstdoutとしてファイルを使用する
- 22. array()とarray()とはどのように異なっていますか
- 23. stdin _and_ stdoutをパイプにリダイレクト
- 24. 複数のプロセスが同時にSTDIN/STDOUTを使用する方法は?
- 25. /dev/ttyとstdin/stdout/stderrの関係は何ですか?
- 26. stdin stdout用のロガー
- 27. bashのstdinとstdoutの両方を別のファイルにリダイレクトする
- 28. プロセスはバックグラウンドの状態をどのように知っていますか?
- 29. ksh stdoutとstderrを別のプロセスにリダイレクト
- 30. 子プロセスのstdoutを別の子プロセスのstdoutとして使用すると、2番目の子プロセスにデータが渡されない場合がある