背景:Javaプロセスがポートにバインドします。 Javaプロセスは、(jdk8s -XX:OnOutOfMemoryErrorを使用して)サブプロセスでシェルスクリプトを開始するようになりました。このシェルスクリプトは、Javaプロセスを正常に停止します。残念ながら、ポートはまだサブプロセスにバインドされているので、Javaプロセスを再起動することはできません。シェル:開いているポートの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>&-"
です。これは実際には動作しますが、このパイプモンスターを回避する方法はありますか?