最初にここでいくつかのコマンドを実行します:
ログインプロセスのIDを出力します(ログインして終了するまで常に存在します)
リーリーログインプロセスによってフォークアウトされたシェルプロセスを出力します(ログインして終了するまで常に存在します)
リーリー上記のコマンドからわかるように:
ログインプロセス ID は 3411 で、bash シェルのサブプロセス 3412 を作成します。今後のスクリプトの実行、
3412 ここではこれをメイン シェルと呼び、スクリプトを処理するサブシェル プロセスを開始します。
(注: bash では、サブシェル プロセスの PID は特別な変数「$$」に格納され、PPID にはサブシェルの親プロセスの ID が格納されます。)
検証するために 2 つの小さなプログラムを書いてみましょう:
george.guo@ls:~$ 猫 Yes.c
リーリーgeorge.guo@ls:~$ 猫テスト
リーリー実行結果は以下の通りです:
george.guo@ls~$ ./はい
リーリーyes プロセスの親プロセス ID は 3412 であることがわかります。これは、ログイン プロセス フォークとメイン シェルの bash シェル子プロセスです。
だからですyes はメインシェルによって実行されます。はい プロセス ID は 6080、呼び出しシステム、フォーク、サブシェル ID は 6081 です。
システムコールの場合:
system() を使用してコマンドを実行するには、少なくとも 2 つのプロセスを作成する必要があります。 1 つはシェルを実行するためのもの (ここでは ID は 6081)、
残りの 1 つ以上は、シェルによって実行されるコマンドに使用されます (ここにはサブシェルがあり、スクリプト テスト自体です)。
スクリプトテスト自体のプロセスIDは6082です。以上がLinux シェルとプロセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。