プロセス制御のLinuxのショップタイプ

      シェア平和を参照するには単語の知識、お互いを励ます:学習サイクルが分割された学習、思考、実際、訂正学習の効率が高い4段、短い期間、。

       Linuxは、この構造は、実行中のプロセスに基本的な情報を説明しtask_struct構造。プロセスです。次に、私が練習セッションでプロセス制御、について何かを言います。

    1.プロセスの作成

      まず、機能紹介:pid_tフォーク(ボイド);    戻り値:子が0親が子プロセスIDを返し、サブプロセスを作成すると、失敗するか-1       

        プロセスがフォーク呼び出したときに、同じコードが2つのバイナリコードを生成します。そして、それらはすべて同じ場所に実行します。さて、あなたは何を表示するには:

     

       

     その結果、我々は検証されています:親プロセスがフォークの前に独立して実行し、フォークした後、父と息子の両方を実行フローを実行しました。

    フォーク原則:       

          プロセスがフォークを呼び出した後、制御はカーネルに転送されたときに、カーネルは4つの物事を行います。

          1.子プロセスとデータ構造にメモリの新しいブロックを割り当て

          2.親データ構造の部分は、子プロセスにコピー

          3.システム・プロセス(PCB)リストに子プロセスを追加します。

               返す、スケジューリングを開始4.fork

                                   

      コピー・オン・ライト技術: 

      

       実際、フォークは、親プロセスのデータがコピーされたPCB、子プロセスのPCBを作成することである仮想アドレス空間のページテーブルはまったく同じなので、自分のコードとデータが同じように見えるので、この時、親と子、。

       しかし、このプロセスは、独立している任意のプロセスデータが他のプロセスに影響を与えるべきではない修正するので、子プロセスは、データを保存するために、独自の物理メモリを開く必要があるはずです。

       しかし、子供がデータを変更して、ページ・テーブルを更新するスペースを開けていない場合、それは資源の無駄なので、オペレーティング・システムは、データ・メモリのコピーを開き始めるが、データを変更し、新しいを開くために子供を与えるために、プロセスを待ちません。物理メモリ、---書き込み時にデータのコピー技術をコピーします

 

      多くのシステム上の問題があるため、次に簡単なのvfork ---親と子は、のvforkの仮想アドレス空間を共有し、それが推奨されていません。

      子プロセスが終了するまでのvforkの子プロセスは、親プロセスのブロックを実行しています。

 

      2.プロセスが終了します

    プロセスの終了時には、保存して終了の理由なので、彼らは、タスクが正常に完了したプロセスを知っています。

    プロセスの終了シナリオ:

          1.正常終了、正しい結果。

          2.正常終了、エラーの結果は、

               3.結果を判断するための基準として使用することができない、予期せず終了しました

      出口戦略のプロセス: 

          1.mainの中のリターン;

          ---; 2. exit関数を呼び出し1と2は、起動する前に、他の作業のリリースを行うには、バッファ最初の面一になっています

          3.コール_exit機能; --- 失礼すぐに終了し、すべてのリソースを解放

    

    3.プロセス待機

      あなたがしたいので、なぜ?プロセスを待つゾンビを避けます

      子プロセスが終了するが、そうする場合、親が知らないため、子プロセスを作成した後、子プロセスが終了するのを待ってきました

      関数の説明:

        

         ブロッキング:操作が完了するまで、現在の状態が完了していない場合は、操作を完了するために通話を開始するには、その後、待ちます。

         通話を開始した後すぐに復帰するかどうか:ブロックし、非ブロックの間の差。 

        サブプロセスのステータスを取得します: 

          待って、オペレーティングシステムによって満たされている状態、出力パラメータを持っているのwaitpid。

          ステータスは、単にビューの整数、しかしとしてすることはできませんビットマップ、次のように具体的な詳細は以下のとおりです。

                       

            テスト検証コード:

 

            コアダンプ記号:コアダンプフラグ

            プログラムが異常終了した場合、事後のデバッグを容易にするための情報ストアドプロシージャをスタック  (:安全上の問題とスペース占有コアダンプは、通常はデフォルトでオフになっています)

  

    4.プログラムを置き換えます

    以前我々は、実際の物理アドレスマッピングコード領域コードセグメントの仮想アドレス空間に応じて、プロセスを実行するためにどのようなコードを知っています。

      これは、コードセグメントは、別のプログラムの位置を交換物理メモリ位置コードに仮想アドレスをマッピングした場合、プロセスは、別のプログラムを実行することを意味します。

      

 

       どのようなものです:コードは、コードマッピング位置を交換することは、他のメモリ領域コードの位置になり、再初期化されたデータセクション

       ほとんどの場合、我々は、子プロセスを作成することです:なぜ子プロセスが別のプログラムを実行したり、他のタスクを実行できるようにします

       インプリメンテーション:オペレーティングシステムは、インターフェースのセットが交換プログラムを実現することができる提供する、と呼ばれる関数のEXECファミリー     

書式#include <unistd.h> 

int型EXECL(のconst char型*パス、CONSTのchar *のArg、...); // NULL終了後に
int型のexeclp(ファイルのconst char型*、constのchar型*のArg、...); 
int型execle(CONSTのchar *パス、CONSTのchar * GRG、...、CONSTのchar * envpを[]); 

int型EXECV(CONSTのchar *パス、CONSTのchar *のARGV); // ARGV配列はNULL終了しなければならない
(int型execvpのをファイルのchar *のCONST、CONSTのchar * argvの); 
int型はexecve(CONSTのchar *パス、CONSTするchar * argvの、CONSTのchar * envpを[]); //配列のenvpを端部がNULLである

事実//のみはexecveシステムコール、他の関数が呼び出されはexecve

      2.引数 

      パスは:対応するファイルがどのディレクトリに(私はまた、プログラムがどちらを実行すべきと述べた)ことを示しています。 

      ファイル:ファイル名のみを記入し、システムはPATHに見つかります。 

      envpを[]:環境変数を示し、プログラムは、後に独自のセットを置き換えます 

      3.コマンドの理解 

      L(リスト):リストを示すパラメータを使用して 

      V(ベクトル):パラメータは、アレイの形をとります 

      P(パス):P-自動検索PATH環境変数 

      E(envpを):彼は(メンテナンス)環境変数設定と(自分が何を設定されている環境変数を、環境変数には、何を最新の手順です)

      理論の話そんなに、それを使用する方法を確認するためのテストコードを書く方が良いです。

する#include <unistd.h> 
int型のmain()
{ 
 するchar * CONSTのargv [] = { "PS"、 "-ef"、NULL}は、
 チャーCONST * envpを[] = {「PATH = / binにします。/ usr / binに"" TERM =コンソール"NULL}; EXECL(" / binに/ PS "" PS "" -ef」、NULL);
 PATH環境変数のPと//はフルパス記述することなく、使用することができる
 (のexeclpを"PS"、 "PS"、 "-ef"、NULL); // Eベルト、自分の環境変数を組み立てることが必要である
 )、NULL、 "PS"、execle( "PS"をenvpを"-ef"; EXECVします( " / binに/ PS "ARGV); //ベルトp、あなたは全体のパス記述することなく、環境変数PATHを使用することができます
 execvpの(" PSを; ")、ARGVを自分の環境変数を組み立てるために必要と// eは
 / binが(はexecve" / PS」、ARGV、envpを); 
 終了(0); 
}






  

おすすめ

転載: www.cnblogs.com/Duikerdd/p/11687591.html