2013-05-13 24 views
2

我打電話system("bash ../tools/bashScript \"This is an argument!\" &"),然後我打電話close(socketFD)system後直接返回,當然我讀過,有&附加system的說法將forkcommand,所以system立即返回,我檢查了!的close()系統後()怪異的行爲

現在的問題是,我不希望在正在執行command插座保持連接,但最奇特的地方是,該方案的工作流繼續和close在一定程度上看到和忽視,一旦command完成close生效!

我想每個人的後打電話到close兩次以確保如果刪除創建的socketFD的每個副本,還是同樣的問題,我真的不知道爲什麼close被調用,但不會生效,直到command(bash腳本)結束!

請指教!

回答

2

我對你在做什麼感到有點困惑,但system實際上是一個薄於fork的包裝。這意味着兩個進程都擁有套接字描述符的副本*,並且只關閉一個「副本」。另一個持續到執行system命令的分叉進程終止。

爲什麼在撥打system之前不要關閉插座?

您也可以嘗試在dup「d描述使用shutdown,如:

shutdown(s,SHUT_RDWR); 

* 周圍發生了什麼文件和套接字描述符裏邊反規則通過fork電話是有點不是‘複製’更微妙,但這足以解釋爲什麼它不適合你。

+0

我不能因此而必須發送消息,'系統'在一個不同的函數中被調用,返回'close'在將一個消息寫入套接字後被調用,我也嘗試調用'close'兩次,仍然是同樣的問題。 – 2013-05-13 20:42:34

+0

這只是不是如何工作。你是否試圖讓套接字掛在客戶端上? – Gian 2013-05-13 20:44:02

+0

是的,我想關閉連接,我正在嘗試你現在說的話。 – 2013-05-13 20:45:44