2011-02-07 5 views
0

私は特定のTCPポートを開いている自分自身のプロセスのpidを見つけるためにfuserを使用しようとしています。定着器のmanページでfuserはroot以外のユーザとしてソケットをどのように報告しますか?

それは言う:

... root以外のユーザーとしての定着を実行している場合、TCPやUDPソケットを探していたときに、この問題が発生する最も一般的な時間があります。この場合、fuserはアクセスを報告しません。 ...

しかし、私のUbuntuのボックスに、定着装置は、私が所有するプロセスのために開いているレポートのソケット、例えばん:

perlの-MIO ::ソケット「IO ::ソケット:: INET->新は(聞きます=> 10、次に、localport => 3000)TCP 3000 -n」&

定着

質問:どのように物事がこれが起こることを許可するように設定されていますか?それはカーネルの設定オプションですか?

ありがとうございます!

注:質問です:フューザが定着は、通常のユーザーとして実行されたときにソケットを所有しているプロセスを報告するように、いくつかのLinuxディストリビューションが設定されていますか? 1つのUbuntuディストリビューション "fuser -n tcp 3000"は、プロセスを所有していてもプロセスを報告しますが、別のLinuxディストリビューション(Centosと思う)では、所有していてもプロセスを報告しません。

答えて

1

fuserはディレクトリを操作してファイル記述子をチェックするファイルシステム(proc(5))を経由します。あなたが所有するプロセスには、対応する/procのエントリが再度所有されています。これにより、プロセスを確認することができますが、他のプロセスはチェックすることはできません。

1つの非常に便利なツールがstrace(1)与えられたプログラムが何をしているかがわかります。たとえば、あなたはどのようなシステムコール、そしてどのような引数を指定して、fuserによって行われて見ることができます:

~$ strace fuser -n tcp 3000 
+0

こんにちは - おかげで、それは私が求めているものを正確にはありません。私は、特定のソケットを所有しているプロセスをfuserに見せたり、見せたりすることができないカーネル設定オプションがあると思います。 1つのLinuxディストリビューションでは、fuserは自分自身のプロセスを "見る"ことができますが、別のディストリビューションでは "fuser -n tcp 3000"はプロセスを所有していても何も報告しません。 – perlman

+0

@perlmanは、 'fuser'が自分のプロセスを見ることを許可しないマシンで' SELINUX'を有効にしていますか? –

関連する問題