linuxプロセス制御

2733 ワード

linuxプロセス制御
forkの実行ルール:親プロセスをテンプレートとして、サブプロセスを作成します.1、親プロセスのPCBをコピーして、少し修正して、サブプロセスのPCB 2になります.親プロセスの仮想アドレス空間をコピーします.サブプロセスのアドレス空間として、書き込み時コピー=>親子プロセスはコードを共有しています.それぞれのデータは大部分のメモリ空間がコピーされる可能性があるため、作成プロセスのオーバーヘッドは依然として高いです(スレッドに比べて).一部のシーンでは、スレッドの作成にもオーバーヘッドが高いと考えられます(コヒーレントに比べて).3、fork戻りは親子プロセスでそれぞれ戻ります.親プロセスでサブプロセスを返すpidサブプロセスは0を返しますforkの後で引き続き実行します4、親子プロセスは前後順がなく、すべてスケジューラによって誰が先に誰が後になるかを実現します.
#include
#include
int main(){
    for(int i=0;i<2,++i){
        fork();
        printf("=");         //8 
        //fflush(stdout);    6 
    }
    return 0;
}


グラフィックスインタフェースの作成:{C#,MFC(C++),GTK(C),wxWidget(C+),Qt}
プロセス終了{コード実行完了結果正しいコード実行完了結果正しくないコード実行完了、異常終了コード実行完了の場合{1、main関数が戻り、戻り値をプロセスの終了コードと呼び、実行結果が正しいかどうかを歌終了コードで表す.終了コードは0で結果が正しいことを示し、終了コードは0でないと結果が正しくないことを示します.これはbashの特殊な変数です.この変数は、前のコマンドに対応するプロセスの終了コード2、exitプロセスの終了(ライブラリ関数)exitが本質的に呼び出されたことを示します.exitですが、それとは違います{exitはストリームを閉じてバッファをリフレッシュし、exitはバッファをリフレッシュしていないexitは終了関数}3,_を多く呼び出しているexitプロセス終了(システム呼び出し)
#include
#include
#include
//  c         ,          (    )
void func(){
    printf("goodbye!
"); } int main() { // atexit(func); return 0; } } , { try catch #include #include int main() { printf("%d
",10/0); return 0;// } { int *p=NULL; *p=10; printf("%d
",*p); return 0;// } } }

≪プロセス待機|Process Wait|ldap≫:親プロセスが子プロセスを待機します.待機は、サブプロセスの実行結果{waitのメソッド:#include pid_t wait(int*status);戻り値:待機中のプロセスpidに正常に戻り、失敗した戻り値-1パラメータ:出力型パラメータ、サブプロセス終了状態を取得し、関心がなければNULLプラグ式待機に設定でき、サブプロセスが終了してから戻る
#include
#include
#include
int main(){
    pid_t ret=fork();
    if(ret>0){
        //father
        printf("father %d
",getpid()); int status=0; pid_t result=wait(&status); printf("result %d status %d
",result,status); if(status&0xff){ printf(" , %d
",status & 0x7f); }else{ printf(" , %d
",(status>>8)&0xff); } }else if(ret==0){ //child int count=3; while(count>0){ printf("child %d
",getpid()); sleep(1); --count; } exit(0); } else{// perror("fork);} return 0; }

いくつかの覚えておきたい数字の範囲:{-128—>127‖0—>255-32768—>32767‖0—>65535}
堅持してこそ、終始することができる.
aka_captain