ls
これは、bash に 入力して実行した後に何が起こるかを示す図です。
ls
最初の部分は実行される前の状況を示しています。バッシュ端末エミュレータの子プロセスですxtermそして、彼らは同じオーラ、同じ環境を周囲に持っています。xxマークは、両方ともXtermそしてバッシュ父プロセスと子プロセスは同一の環境変数セットを持っているためです。
2 番目の部分は、新しいプロセス (ls) を開始した後に何が起こるかを示しています。
- Bashは子プロセスを作成しますが、これは自分自身の正確なコピーなので、私はこれを次のように名付けました。バッシュ(Bash_copy の略)。
- それから、バッシュls プロセスに置き換えられています。
この図はわかりやすく、説明も不要で、直感的で、曖昧さがないと思います。
しかし、私は の図を描いていません(ls)
。どのように見えるかわからないからです。どのように見えるかについてはいくつかの異なるシナリオがありますが、ここで質問の部分が始まります。 の図はどのように(ls)
見えるでしょうか? 描いてコメントしてください。
答え1
のプロセス階層は(ls)
のと同じですls
(つまり )。→ bash → ls
ただし、コマンドのリストを括弧 : 内に入れると(ls; ls)
、bash はサブシェルを起動し、そのサブシェル内でコマンドを実行します。結果として得られるプロセス階層は次のようになります→ bash → bash → ls
(2 つの ls プロセスは順番に実行されます)。
これを視覚化するには、 ls: の代わりに引数なしで cat を使用します。最初の cat プロセスは入力を待機し、 を使用して、または別のターミナルで(cat; cat)
何が起こっているかを確認する機会を提供します。pstree
top