0
背景:Java進程綁定到端口。 java進程現在在子進程中啓動一個shell腳本(使用jdk8s -XX:OnOutOfMemoryError)。這個shell腳本成功關閉了java進程。不幸的是,它不能重新啓動Java進程,因爲端口仍然綁定到子進程...Shell:如何獲取開放端口的FD
我知道,我可以關閉任何FD,即使是那些連接到套接字。所以我目前的解決方案是
INODE=$(netstat -tulpen | grep ":$PORT " | awk '{print $8}')
FD_SOCKET=$(ls -l /proc/$$/fd | grep socket | grep "\[$INODE\]" | grep -o " [0-9]\+ -> " | awk '{print $1}')
eval "exec $FD_SOCKET>&-"
這實際上工作,但如何避免這個管道怪物?