Computer Science & Information Management Process wait(程序等待)
process排程 若有兩個以上的程序(parent, child)在執行, 且皆會使用大量的電腦資源(CPU運算、IO)。 則電腦會按照作業系統的排程法則來運作。 試撰寫大量迴圈運算,並利用父子程序搶 奪資源,查看執行狀態。
平行處理 #include<stdio.h> main() { int i; int child = fork(); if( child ==0 ) { for( i=0; i<100; i++) printf(“ child: %d\n”, i); }else{ for( i=0; i<100; i++) printf(“parent: %d\n”, i); } }
平行處理
指令 指令 說明 sleep(int second) 停滯 wait(int *status) 等待子程序完成
程序睡眠 #include<stdio.h> main() { int i; int child = fork(); if( child ==0 ) { for( i=0; i<10; i++) printf(“ child: %d\n”, i); }else{ sleep(5); for( i=0; i<10; i++) printf(“parent: %d\n”, i); }
刪除指定程序 如果您具有管理員或是擁有者的身份,則 可將某個程序由 top 中刪除, Kill -1 :重新讀取一次參數的設定檔 (類似 reload)。 -2 :代表與由鍵盤輸入 [ctrl]-c 同樣的動作。 -9 :立刻強制刪除一個工作。 -15:以正常的程序方式終止一項工作。 範例 : kill -9 [pid]
程序睡眠 int child = fork(); if( child ==0 ) { for( i=0; i<10; i++) printf(“ child: %d\n”, i); }else{ sleep(5); for( i=0; i<10; i++) printf(“parent: %d\n”, i); } 試試讓子程序睡眠 結果有何不同
殭屍程序 當父程序結束後,子程序以處理後續的工作,而父程序fork()之前既沒設置SIGCHLD信號處理函數調用waitpid()等待子進程結束,又沒有設置忽略該信號,則子程序成為僵屍程序,無法正常結束。 即使是root身份kill -9也不能殺死僵屍程序。
指令 指令 說明 sleep(int second) 停滯 wait(int *status) 等待子程序完成
程序等待 int child = fork(); } } #include<stdio.h> main() { int i,status; int child = fork(); if( child ==0 ) { for( i=0; i<10; i++) printf(“ child: %d\n”, i); sleep(5); }else{ wait(&status); for( i=0; i<10; i++) printf(“parent: %d\n”, i); printf(“return: %d\n”, status); } }