2016-03-08 9 views
0

我收到「bind:Address already in use」錯誤。有什麼方法可以找到哪個套接字被綁定?當我找到它時,我該如何解除鏈接?如何查找和取消綁定套接字

+0

你需要殺死它創建的套接字的過程中,可能所有的兒童進程。使用'netstat -apn | grep $ portnumber'來找到它們。 –

回答

1

套接字綁定到一個進程。你只需要使用發現進程ID:

netstat -nap

-p標誌將包括進程ID ,但你必須要根

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11152/lighttpd

在這個例子中港8080被分配給lighttpd,進程號爲11152

列出打開文件的命令流程(lsof的)會給類似的信息

一旦你找到進程ID,你可以簡單地通過發出殺死它:

kill [pid]

+0

這不意味着我需要知道端口號嗎?我確定我問的太多了,但有什麼方法可以在「bind:Address already in use」時找到綁定哪個端口的方法? –

+0

當你運行一個進程時,你得到「Address Already in use」是因爲那個進程試圖綁定一個特定的端口。 例如,Web服務器默認嘗試綁定端口80(除非您通過編輯配置文件來修改該端口) 給我更多關於您正在運行的進程的詳細信息(您是在編碼什麼?),我可以幫助你瞭解哪個端口可能試圖綁定() – Sainti

+0

如果你通過strace運行一個程序,你會看到該進程所做的每個系統調用,包括bind()系統調用。 例如:'strace。/ myprogram'你會得到一個巨大的輸出,類似於: bind(3,{sa_family = AF_INET,sin_port = htons(8080),sin_addr = inet_addr(「0.0.0.0」)},16 )= 0' – Sainti