指定されたPIDを持つプロセスが外部コマンドを使用せずにポートが開いているかどうかを知る必要があります。その後、/proc
ファイルシステムを使用する必要があります。たとえば、ファイルを読み取り、/proc/$PID/net/tcp
プロセスで開かれたTCPポートに関する情報を取得できます。ただし、マルチスレッドプロセスでは、ディレクトリにファイル/proc/$PID/task/$TID
も含まれますnet/tcp
。私の質問は次のとおりです
すべてのスレッドファイルを確認する必要がありますかnet/tcp
、それともスレッドが開いたポートをnet/tcp
プロセスファイルに書き込む必要がありますか?
ベストアンサー1
たとえば、/proc/$PID/net/tcp ファイルを読み込み、プロセスで開かれた TCP ポートに関する情報を取得できます。
このファイルは以下によって生成されませんでした。プロセス。同じネットワーク名前空間で実行されているプロセスに対して現在ネットワーク名前空間で開いているすべてのTCPポートのリスト。まったく同じコンテンツ/proc/net/tcp
。
プロセスで開かれたポートを見つけるには、ソケット記述子のリストを取得し、その記述子を/proc/<pid>/fd
のinode
フィールドと一致させる必要があります/proc/net/tcp
。