- ベストアンサー
起動しているプロセスをリスト
FreeBSDで、現在起動しているプロセスを表示させるコマンドなどございますでしょうか?また、自分が作成したプロセスのみを表示させることもしたいのですが、方法をご存知の方おられましたらなにとぞよろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>find -inum 23993306 これだとエラーになると思いますが、エラーメッセージが出ませんでしたか? >test.php がすでに終了していた場合はそのようになってしまうのでしょうか? いえ、そういう事はありません。 iノード番号はファイルが存在していれば必ず存在しますから、消されていない限りiノード番号からファイルは特定出来ます。 例 %fstat -u user USER CMD PID FD MOUNT INUM MODE SZ|DV R/W user fstat 9627 root / 2 drwxr-xr-x 512 r user fstat 9627 wd / 472591 drwx--x--x 1536 r user fstat 9627 text / 1130653 -r-xr-sr-x 15236 r user fstat 9627 0 /dev 83 crw--w---- ttyp0 rw <省略> 実行されたコマンドは、FDがtextのもの。 findの実行は、MOUNTが/で、INUMが1130653だから %find / -inum 1130653 <パーミッションの関係で出るエラーは省略> /usr/bin/fstat 個人的には、こういう手間を行うならlsofコマンドの方がいいとは思いますが。 >また、whoami と打つと、「www」と出るのですが、logname と打つと「root」と出ます。これらは別々のものなのでしょうか?質問が逸れていますがどうぞよろしくお願いいたします。 whoami → 実効ユーザ名 logname → ログイン名 rootでログインして、suあたりでwwwになっているとか。
その他の回答 (5)
- Lean
- ベストアンサー率72% (435/603)
基本的にlsof、fstat共にプロセス情報を表示するコマンドではなくて、オープンされているファイルの情報を表示するコマンドです。 なので、プロセスがたくさんのファイルをオープンしているとその分表示されるのも多くなります。 lsofコマンド、fstatコマンドであるユーザがオープンしているファイルに絞りたい場合には-uオプションでユーザを指定すればいいです。 >COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME >httpd 82917 www cwd VDIR 157,131079 1536 10746765 /home/user/public_html/test 上記ですが、FDの項がcwdとあるようにカレントの作業ディレクトリになります。 スクリプトのファイルもオープンされているのでしたら、そちらも別に表示されていると思います。 >fstat とすると以下の項目が表示されました。ノード番号はINUMのことでよろしいでしょうか? はい、INUMです。 fstatコマンド http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=fstat&dir=jpman-6.2.2%2Fman§=0
お礼
ありがとうございます。 まず、テスト用のスクリプト(test.php)を走らせ、そのPIDを取得し、fstat でPIDのマッチする inode 番号を得、その番号で以下のようにしましたが、何も表示されませんでした。(23993306がINUM) find -inum 23993306 test.php がすでに終了していた場合はそのようになってしまうのでしょうか? また、whoami と打つと、「www」と出るのですが、logname と打つと「root」と出ます。これらは別々のものなのでしょうか?質問が逸れていますがどうぞよろしくお願いいたします。
- Lean
- ベストアンサー率72% (435/603)
>$ ps axuww | more 時絶対パス指定でコマンドを実行しているなら、それでパスまで表示されるでしょうが、コマンド名のみとか相対パス指定でコマンドを実行した時には分かりませんよね。 No.2で書いたlsofはFreeBSD標準のコマンドではないので、FreeBSD標準のコマンドだけでいうのであれば、1つのコマンドのみでというのは難しいかもしれません。 例えば、fstatコマンドあたりでオープンされているファイル(コマンド)のiノード番号とファイルシステムを調べて、findコマンドの-inum iノード番号でファイルを調べるという方法もあるかな。
お礼
ありがとうございます。 fstat とすると以下の項目が表示されました。ノード番号はINUMのことでよろしいでしょうか? USER CMD PID FD MOUNT INUM MODE SZ|DV R/W また、ひとつのプロセス(PID)でものすごい数の行がリストされるのですが、これを限定させて表示させたりできるのでしょうか? どうぞよろしくお願いいたします。
- mekanik
- ベストアンサー率26% (4/15)
こんにちは。 僕は、手癖で、 $ ps axuww | more といつもやっています。 深くオプションの意味は考えていませんが、、 パスとかも出ますよ。
お礼
ありがとうございます。テスト用のphpスクリプトを実行中に、「ps xuww | more」としたところ、そのスクリプトのプロセスが以下のように表示され、lsof とは違ったパスが表示されました。 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND www 97995 0.0 1.0 31780 20548 ?? S 2:51PM 0:00.01 /usr/local/apache/bin/httpd -DSSL 実行したのは、/home/user/public_html/test/test.php というスクリプトです。このスクリプトはテスト用に作ったのですが、ブラウザからアクセスすると、一定時間プロセスが起動しPIDを返すようにしています。 lsofでは/home/user/public_html/test までは表示されましたので、最後のtest.phpが表示できないものかと思っています。どうぞよろしくお願いいたします。
- Lean
- ベストアンサー率72% (435/603)
>あつかましい質問なのですが、プロセスを生成したスクリプトやプログラムの場所(パス)など一緒に表示できますでしょうか? Ports/Packagesにあるlsofコマンド(sysutils/lsof)を使用するとか。
お礼
試しに、phpスクリプトを実行中にlsofコマンドを実行したところたくさんプロセスがリストされました。 その中で、そのphpのスクリプトと思われるものがあり、ディレクトリパス名が一致しているのですが、スクリプトファイル名が表示されません。これをファイル名も含ませることはできますでしょうか? COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 82917 www cwd VDIR 157,131079 1536 10746765 /home/user/public_html/test
- Lean
- ベストアンサー率72% (435/603)
FreeBSDに限らず、UNIX系OSではpsコマンドで起動しているプロセスを表示させる事が出来ます。 基本的にはpsコマンドを実行したユーザ(自分)のプロセスのみ表示されます。 -aオプションを指定する事によってpsコマンドを実行したユーザ(自分)とそれ(自分)以外のユーザのプロセスについても表示出来ます。 指定のユーザのプロセスのみ表示したい場合には、-Uオプションを使用すると指定したユーザのプロセスを表示出来ます。 オプションの指定方法は下記のページのマニュアルを参照してください。 psコマンド http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=ps&dir=jpman-6.2.2%2Fman§=0
お礼
ありがとうございます。やってみると意外と簡単で、すごくシンプルで使いやすいという印象を受けました。 あつかましい質問なのですが、プロセスを生成したスクリプトやプログラムの場所(パス)など一緒に表示できますでしょうか?紹介して下さったページでは見つかりませんでした。 どうぞよろしくお願いいたします。
お礼
ありがとうございます。 >これだとエラーになると思いますが、エラーメッセージが出ませんでしたか? はい。Permission denied と出ます。 >個人的には、こういう手間を行うならlsofコマンドの方がいいとは思いますが。 結局なんども試したものの、パーミションのエラーがでてスクリプトを特定できませんでした。 lsofコマンドもディレクトリまでは分かるのですが肝心のファイル名が分からないため、どうしたものかと思っています。 しかし、簡単にプロセスを起動しているプログラムが特定できないことが分かっただけでもありがたく思います。