0

特定の TCP ポートが開いている自分が所有するプロセスの pid を見つけるために、fuser を使用しようとしています。

フューザーのマニュアルページには次のように書かれています:

... この問題が最もよく発生するのは、fuser を root 以外のユーザーとして実行しているときに TCP または UDP ソケットを探すときです。この場合、fuser はアクセスなしを報告します。...

ただし、私のUbuntuボックスでは、fuserは私が所有するプロセスに対して開いているソケットを報告します。

perl -MIO::Socket 'IO::Socket::INET->new(Listen => 10, LocalPort => 3000)' &

フューザー -n tcp 3000

質問: これを可能にするために、どのように設定されていますか? カーネル構成オプションですか?

ありがとう!

注: 問題は、fuser が通常のユーザーとして実行されているときに、fuser がソケットを所有しているプロセスを報告するように、一部の Linux ディストリビューションをどのように構成しているのかということです。プロセスを所有している場合、1つのUbuntuディストリビューション「fuser -n tcp 3000」はプロセスを報告しますが、別のLinuxディストリビューション(Centosだと思います)では、プロセスを所有していてもプロセスを報告しません。

4

1 に答える 1

1

fuser/procファイル システム ( proc(5)) を調べて、ディレクトリ/proc/[pid]/fd/を調べ、ファイル記述子をチェックします。自分が所有するプロセスには、/proc再び自分が所有する対応するエントリがあります。これにより、自分のプロセスをチェックできますが、他のプロセスはチェックできません。

特定のプログラムが何をしているかを確認するための非常に便利なツールの 1 つが ですstrace(1)。たとえば、どのシステム コールが、どの引数で、 によって実行されるかを確認できますfuser

~$ strace fuser -n tcp 3000
于 2011-02-07T19:38:09.197 に答える