Solaris の truss は、FD が停止しているが機能していないことを示しています。

Solaris の truss は、FD が停止しているが機能していないことを示しています。

混乱しています。 DBAの1人がLDAP接続エラーの問題を報告しました。私はそれが正確に何につながっているのかを知るためにトラスでそれを追跡し始めると思いましたが、私が見たことは私には理解できませんでした。

以下は、ファイル記述子35に対するトラス出力の完全な抜粋である。

# grep 35 /tmp/11834.2.truss | grep -v write.33  
/3:     read(35, " 0", 1)                               = 1  
/3:     read(35, "\f", 1)                               = 1  
/3:     read(35, "020101 `0702010304\080\0", 12)        = 12  
/9:     write(35, " 084\0\0\010020101 a84\0".., 22)     = 22  
/3:     read(35, " 0", 1)                               = 1  
/3:     read(35, "81", 1)                               = 1  
/3:     read(35, "9E", 1)                               = 1  
/3:     read(35, "020102 c819804 : c n = a".., 158)     = 158  
/9:     write(35, " 084\0\001 8020102 d84\0".., 340)    = 340  
/3:     read(35, " 0", 1)                               = 1  
/3:     read(35, "05", 1)                               = 1  
/3:     read(35, "020103 B\0", 5)                       = 5  
/3:     close(35)                                       = 0  
/6:     read(35, " 0", 1)                               = 1  
/6:     read(35, "\f", 1)                               = 1  
/6:     read(35, "020101 `0702010304\080\0", 12)        = 12  
/8:     write(35, " 084\0\0\010020101 a84\0".., 22)     = 22  
/6:     read(35, " 0", 1)                               = 1  
/6:     read(35, "81", 1)                               = 1  
/6:     read(35, "98", 1)                               = 1  
/6:     read(35, "020102 c819204 4 c n = M".., 152)     = 152  
/9:     write(35, " 084\0\001 @020102 d84\0".., 348)    = 348  
/6:     read(35, " 0", 1)                               = 1  
/6:     read(35, "05", 1)                               = 1  
/6:     read(35, "020103 B\0", 5)                       = 5  
/6:     close(35)                                       = 0  
/6:     read(35, 0x7FFFEFB4FFB4B, 1)                    Err#131 ECONNRESET  
/6:     close(35)                                       = 0  
/6:     read(35, " 0", 1)                               = 1  
/6:     read(35, "\f", 1)                               = 1  
/6:     read(35, "020101 `0702010304\080\0", 12)        = 12  
/8:     write(35, " 084\0\0\010020101 a84\0".., 22)     = 22  
/6:     read(35, " 0", 1)                               = 1  
/6:     read(35, "81", 1)                               = 1  
/6:     read(35, "A3", 1)                               = 1  
/6:     read(35, "020102 c819D04 ? c n = a".., 163)     = 163  
/8:     write(35, " 084\0\001 B020102 d84\0".., 350)    = 350  
/6:     read(35, " 0", 1)                               = 1  
/6:     read(35, "05", 1)                               = 1  
/6:     read(35, "020103 B\0", 5)                       = 5  
/6:     close(35)                                       = 0  

この間、プロセスでpfilesを実行すると、FD35は表示されません。トラス出力で見られるように開かれませんが、このトレース中に2回読み書き、閉じ、その後も引き続き使用されます。ネットワークトレースを実行するために何を言っているのか知りたいです...

以前に同様の動作を見たことがあり、説明に役立つ人はいますか?もちろん、会社の「故障していない場合は直さないでください」というポリシーもここで機能する可能性があります。

どんな情報でも大変感謝いたします。

ベストアンサー1

プロセスはfdを使用するために開く必要はありません。

親プロセスが子プロセスが開かれたファイル記述子を継承できるようにする場合に機能します。

注:私は開いているファイル記述子のリストを信頼してtruss確認します。/proc/<pid>/fd/

おすすめ記事