【正文】
加鎖前后的差距。由輸出結果觀察到,加鎖的函數(shù)使得程序結果發(fā)生了變化。從而看出lockf()對兩個進程的輸出表現(xiàn)出互斥作用。而lockf()函數(shù)作為監(jiān)視鎖,對鎖定的進程控制訪問。3. 進程的軟中斷:a) 編寫一段程序,使其實現(xiàn)進程的軟中斷通信;i. 題目要求:使用系統(tǒng)調(diào)用fork() 創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal() 讓父進程捕捉鍵盤上來的中斷信號(即按DEL鍵);當捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用Kill() 向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:Child Process 1 is killed by Parent!Child Process 2 is killed by Parent!父進程等待兩個子進程終止后,輸出如下的信息后終止:Parent Process is killedii. 程序設計說明:利用Del觸發(fā)軟中斷SIGINT。因此加入了my_wait()和my_stop()兩個函數(shù),并通過flag來實現(xiàn)子進程對中斷信號的屏蔽。在程序的實現(xiàn)過程中,我們需要父進程等待子進程終止后再自殺,則需要子進程引入signal預置軟中斷處理函數(shù),等待父進程向他發(fā)出軟中斷信號,而不是直接從鍵盤上自行接受,再自行終止。父進程一旦收到子進程發(fā)送來的終止信息,則結束等待,終止自己的進程。b) 在上面的程序中增加語句signal(SIGINT, SIGIGN) 和 signal(SIGQUIT, SIGIGN),觀察執(zhí)行結果,并分析原因;i. 程序設計說明:在a)代碼基礎上加入以下兩種信號:signal(SIGTINT, SIG_IGN)。//程序終止信號,默認操作寫dumpcore文件ii. 源代碼:參照a)中源代碼。而當只加上signal(SIGQUIT, SIGIGN)時,輸出結果不變。但是后兩種情況的含義是不同的。而同時加上這兩句話,屏蔽了從鍵盤上傳來的中斷信號,因此子進程接收到父進程傳來的軟中斷信號,所以被殺死,輸出killed語句。使用系統(tǒng)調(diào)用pipe() 建立一條管道線;兩個子進程P1和P2分別向管道各寫一句話:Child 1 is sending a message!Child 2 is sending a message!而父進程則從管道中讀出來自于兩個子進程的信息,顯示在屏幕上。而父進程則在子進程全部進行完畢后再執(zhí)行。在管道通信中,系統(tǒng)調(diào)用pipe()函數(shù)初始化一個二元組作為管道,1為出,0為進,以此來保證管道通信不發(fā)生沖突。而在我們編程的過程中,系統(tǒng)通過調(diào)用fork()函數(shù)來創(chuàng)建進程。這