2011-09-28 88 views
2

我寫了一個小型的服務器程序。我想看看它是如何處理多個請求。所以我寫了下面的程序來模擬多個客戶端。我可以用這種方式模擬多個客戶嗎?

僞代碼:

main() 
{ 

    //set up all necessary data structures to connect to the server 

    fork(); 
    fork(); 
    fork(); 

    create_socket(); 
    connect() 

    //more code 

} 

是否有這樣做的更好的辦法?我可以用什麼工具來測試C中的多線程程序(至少是基本功能)?

+0

這不是線程。 –

+0

好吧,我同意。我只想發送併發請求到多線程服務器。 – FourOfAKind

+0

這種方法沒有問題,它可以說是解決問題的最簡單方法。唯一需要注意的是,如果客戶數量變得非常大,您可能需要轉向另一種設計。 – Duck

回答

1

你已經基本上用這種方法創建了一個「流程扇子」,所以是的,它可以工作,雖然它不是線程......你實際上正在創建新的流程。因此,爲了防止殭屍子進程,您需要「等待」每個進程中所有進程完成的所有進程,這些進程產生了一個新進程。你可以達到或接近你main()爲呼籲所有進程的結束與下面的行做到這一點fork()(即,包括子流程,以及因爲它們產卵額外的過程):

while(wait(NULL) != -1 || errno == EINTR); 

這將等待當前進程產生的所有子進程,同時防止由於進程捕獲信號而導致的任何早期返回wait()。當前進程沒有剩餘子進程時,則wait()將返回-1並將errno設置爲ECHILD,從而退出while循環。

相關問題