- fork()函數:一次執行兩次返回,在fork函數執行完畢後,如果創建新進程成功,則出現兩個進程,一個是子進程,一個是父進程。在子進程中,fork函數返回0,在父進程中,fork返回新創建子進程的進程ID。我們可以通過fork返回的值來判斷當前進程是子進程還是父進程。
while((p1=fork())==-1); //如果子進程創建失敗,則返回-1,while循環條件爲==-1爲真,重新執行while()循環,相當於不斷重複創建子進程一直到創建成功爲止
- wait()函數:父進程一旦調用了wait就立即阻塞自己,由wait自動分析是否當前進程的某個子進程已經退出,如果讓它找到了這樣一個已經變成殭屍的子進程,wait就會收集這個子進程的信息,並把它徹底銷燬後返回;如果沒有找到這樣一個子進程,wait就會一直阻塞在這裏,直到有一個出現爲止。
- signal()函數:signal信號函數,第一個參數表示需要處理的信號值(SIGHUP),第二個參數爲處理函數或者是一個表示,這裏,SIG_IGN表示忽略SIGHUP那個註冊的信號。
#供學習參考的代碼片段 signal(SIGINT,SIG_IGN);//忽略鍵盤輸入的 Ctrl+C signal(16,Int1); //只要收到信號16,則執行Int1()函數
- kill()函數:向相關進程發送信號;
void IntDelete() { kill(pid1,16); //向進程 pid1 發送信號16 kill(pid2,17); //同上 }
- pause()函數:是當前進程處於等待狀態,直到接收到一個信號後才能恢復執行。
- lockf(1,1,0)函數:鎖定標準輸出設備,lockf(1,0,0):解鎖標準輸出設備。
lockf(1,1,0); //鎖定標準輸出設備 for(i=0;i<500;i++) printf("son %d\n",i); lockf(1,0,0); //解鎖標準輸出設備
- sleep()函數:自我阻塞
sleep(5); //自我阻塞五妙