2012-04-26 28 views
2

嘿,我似乎迷路了。我應該能夠在一個無限循環內增加一個孩子的計數,並且每當家長髮送一個信號時,每一秒鐘都應該打印一次計數。我寫了我的代碼,但我認爲使用fork後,子進程和父進程同時運行,但事實並非如此,所以我不知道如何解決這個問題。任何幫助將是偉大的如何在使用睡眠功能時增加計數?

+3

*我寫了我的代碼... *給我們看。 – cnicutar 2012-04-26 07:28:49

回答

1

你所描述的應該是理論上的工作。

編寫並行代碼可能會很棘手,尤其是使用fork(),如果您不熟悉該過程。

這裏是我的建議:添加了一堆調試輸出的整個代碼,例如:

int pid = fork(); 
if(pid == -1) { 
    printf("Fork failed!\n"); 
} else if (pid) { 
    printf("I'm the parent!\n"); 
    // Do stuff 
    printf("Parent exiting\n"); 
    exit(0); 
} else { 
    printf("I'm the child!\n"); 
    // Do stuff 
    printf("Child exiting\n"); 
    exit(0); 
} 

然後,你可以看到,如果你的程序行爲的方式應該。

還要添加一個printf()語句到您的信號處理程序,以便您可以確保它被調用。

+0

非常感謝,我想向您展示我的代碼,您能告訴我您是如何發送該代碼,以便它可以保持這種形式嗎?當我複製和粘貼我的代碼後,我發送它後,一束 – ctng1213 2012-04-26 07:56:32

1

子進程應該能夠運行sleep(),並讓父母發送SIGALRM將其喚醒。也許你讓孩子坐在busy loop,耗費了太多的CPU,父母沒有按預期跑步。

當然,如果你顯示你的代碼,這些問題的答案會更好。

+0

我試圖粘貼我的代碼,但它並沒有保留在我粘貼的表單中。在我粘貼我的代碼之前,有什麼特別的我需要做?順便說一下,我是提出問題的人。 – ctng1213 2012-04-26 07:48:40

+0

@ user1357998不確定,可能是問題長度和帳戶的相對新穎性可能存在問題。您可以嘗試使用pastebin或其他類似的網站進行臨時存儲,並希望有人編輯它,當然這不是太長。你的名字就在你的評論和你的問題上。 :) – unwind 2012-04-26 08:27:02