linuxプロセス制御
2733 ワード
linuxプロセス制御
forkの実行ルール:親プロセスをテンプレートとして、サブプロセスを作成します.1、親プロセスのPCBをコピーして、少し修正して、サブプロセスのPCB 2になります.親プロセスの仮想アドレス空間をコピーします.サブプロセスのアドレス空間として、書き込み時コピー=>親子プロセスはコードを共有しています.それぞれのデータは大部分のメモリ空間がコピーされる可能性があるため、作成プロセスのオーバーヘッドは依然として高いです(スレッドに比べて).一部のシーンでは、スレッドの作成にもオーバーヘッドが高いと考えられます(コヒーレントに比べて).3、fork戻りは親子プロセスでそれぞれ戻ります.親プロセスでサブプロセスを返すpidサブプロセスは0を返しますforkの後で引き続き実行します4、親子プロセスは前後順がなく、すべてスケジューラによって誰が先に誰が後になるかを実現します.
グラフィックスインタフェースの作成:{C#,MFC(C++),GTK(C),wxWidget(C+),Qt}
プロセス終了{コード実行完了結果正しいコード実行完了結果正しくないコード実行完了、異常終了コード実行完了の場合{1、main関数が戻り、戻り値をプロセスの終了コードと呼び、実行結果が正しいかどうかを歌終了コードで表す.終了コードは0で結果が正しいことを示し、終了コードは0でないと結果が正しくないことを示します.これはbashの特殊な変数です.この変数は、前のコマンドに対応するプロセスの終了コード2、exitプロセスの終了(ライブラリ関数)exitが本質的に呼び出されたことを示します.exitですが、それとは違います{exitはストリームを閉じてバッファをリフレッシュし、exitはバッファをリフレッシュしていないexitは終了関数}3,_を多く呼び出しているexitプロセス終了(システム呼び出し)
≪プロセス待機|Process Wait|ldap≫:親プロセスが子プロセスを待機します.待機は、サブプロセスの実行結果{waitのメソッド:#include pid_t wait(int*status);戻り値:待機中のプロセスpidに正常に戻り、失敗した戻り値-1パラメータ:出力型パラメータ、サブプロセス終了状態を取得し、関心がなければNULLプラグ式待機に設定でき、サブプロセスが終了してから戻る
いくつかの覚えておきたい数字の範囲:{-128—>127‖0—>255-32768—>32767‖0—>65535}
堅持してこそ、終始することができる.
aka_captain
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