• ベストアンサー

起動しているプロセスをリスト

FreeBSDで、現在起動しているプロセスを表示させるコマンドなどございますでしょうか?また、自分が作成したプロセスのみを表示させることもしたいのですが、方法をご存知の方おられましたらなにとぞよろしくお願いいたします。

  • jyuu
  • お礼率83% (553/665)
  • BSD系OS
  • 回答数6
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.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になっているとか。

jyuu
質問者

お礼

ありがとうございます。 >これだとエラーになると思いますが、エラーメッセージが出ませんでしたか? はい。Permission denied と出ます。 >個人的には、こういう手間を行うならlsofコマンドの方がいいとは思いますが。 結局なんども試したものの、パーミションのエラーがでてスクリプトを特定できませんでした。 lsofコマンドもディレクトリまでは分かるのですが肝心のファイル名が分からないため、どうしたものかと思っています。 しかし、簡単にプロセスを起動しているプログラムが特定できないことが分かっただけでもありがたく思います。

その他の回答 (5)

  • Lean
  • ベストアンサー率72% (435/603)
回答No.5

基本的に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

jyuu
質問者

お礼

ありがとうございます。 まず、テスト用のスクリプト(test.php)を走らせ、そのPIDを取得し、fstat でPIDのマッチする inode 番号を得、その番号で以下のようにしましたが、何も表示されませんでした。(23993306がINUM) find -inum 23993306 test.php がすでに終了していた場合はそのようになってしまうのでしょうか? また、whoami と打つと、「www」と出るのですが、logname と打つと「root」と出ます。これらは別々のものなのでしょうか?質問が逸れていますがどうぞよろしくお願いいたします。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.4

>$ ps axuww | more 時絶対パス指定でコマンドを実行しているなら、それでパスまで表示されるでしょうが、コマンド名のみとか相対パス指定でコマンドを実行した時には分かりませんよね。 No.2で書いたlsofはFreeBSD標準のコマンドではないので、FreeBSD標準のコマンドだけでいうのであれば、1つのコマンドのみでというのは難しいかもしれません。 例えば、fstatコマンドあたりでオープンされているファイル(コマンド)のiノード番号とファイルシステムを調べて、findコマンドの-inum iノード番号でファイルを調べるという方法もあるかな。

jyuu
質問者

お礼

ありがとうございます。 fstat とすると以下の項目が表示されました。ノード番号はINUMのことでよろしいでしょうか? USER CMD PID FD MOUNT INUM MODE SZ|DV R/W また、ひとつのプロセス(PID)でものすごい数の行がリストされるのですが、これを限定させて表示させたりできるのでしょうか? どうぞよろしくお願いいたします。

  • mekanik
  • ベストアンサー率26% (4/15)
回答No.3

こんにちは。 僕は、手癖で、 $ ps axuww | more といつもやっています。 深くオプションの意味は考えていませんが、、 パスとかも出ますよ。

jyuu
質問者

お礼

ありがとうございます。テスト用の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)
回答No.2

>あつかましい質問なのですが、プロセスを生成したスクリプトやプログラムの場所(パス)など一緒に表示できますでしょうか? Ports/Packagesにあるlsofコマンド(sysutils/lsof)を使用するとか。

jyuu
質問者

お礼

試しに、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)
回答No.1

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

jyuu
質問者

お礼

ありがとうございます。やってみると意外と簡単で、すごくシンプルで使いやすいという印象を受けました。 あつかましい質問なのですが、プロセスを生成したスクリプトやプログラムの場所(パス)など一緒に表示できますでしょうか?紹介して下さったページでは見つかりませんでした。 どうぞよろしくお願いいたします。

関連するQ&A

  • プロセスが起動中かどうかを判定するコマンドはありますか?

    あるプログラムを起動したとします。 psコマンドで起動中のプロセス番号を知ることができるのはわかりますが、 プログラム起動中かどうかを判定するコマンドとかあるでしょうか。 たとえば、 >あるコマンド プロセスID のようにプロセスIDを引数として実行すると、プロセス起動中かどうか判定できるような。。。 ご存知な方ご教授おねがいします。

  • javaのプロセス起動について

    UNIXで例えば以下のようなコマンドでjavaのプロセスを停止するとします。 ps -eo pid,comm | awk '$2=="java" {print "kill -9" $1}' 逆にjavaのプロセスをコマンドで起動する方法はありますか?

  • 外部プロセスについて

    現在、javaを本格的に学ぼうか悩んでいます。 pdfファイルのデータベースを作成し、検索、表示するというGUIのプログラムを作りたいのですが、javaでそのようなものが作れるのか調べています。 タイトルにあるようにjavaのみでは難しそうなので、外部プロセスを利用して(特にpdfの表示)作成しようと考えました。 試しに、ボタンをクリックすると外部プロセスが起動する、という簡単なプログラムを作ってみたところ、確かに外部プロセスは起動しましたが、この外部プロセスをインターナルフレームとして起動させることはできますでしょうか?

    • ベストアンサー
    • Java
  • 起動しているアプリケーションのプロセスIDを取得したい.

    現在,起動しているアプリケーションのプロセスIDを取得したいと考えています. プロセスIDを取得するコマンドはあるのでしょうか? 環境:Windows2000+SP3

  • DOS窓からのプロセス終了

    このカテゴリーではないかもしれませんが、OSの違いが有る可能性があるためここで質問させていただきます。 いま、業務でOracleのアプリを作成しているのですがバグの対応方法で、コマンドにてプロセスの終了をしなくてはいけないのですが、NTでのプロセスの終了の仕方がよく解りません。 (要は、DOS窓からプロセスの終了ができれば良いのです。c;\> コマンド名 ○○○.EXE のこのコマンド名が知りたいのです) ここに来る前に、自分なりに調べたのですが・・・という感じで ぜひともご存知の方、ご教授お願い致します。

  • Linuxでの自分が起動しているプロセスの確認法

    Linux(release 4 (Nahant Update 8))を共有ユーザーで使用しています。こういったケースで使用しているツールが時折ハングるのでpsコマンドでプロセスIDを確認してKILLしています。複数の人間が同時に使用している可能性があるのでいつも自分が起動しているプロセスを探すのに苦労します。自分 が起動しているプロセスを探すいい方法はないでしょうか?

  • プロセスを起動順に並び換える方法

    OSはUNIXです。 psコマンドで実行中のプロセスを 表示したんですが。 そのプロセスを実行順に並び換えるコマンドがわかりません。 何かおかしな事書いてあるようでしたら、 ご指摘ください。

  • プロセスを複数起動する方法

    プロセス数の上限監視の検証を行うことになり、上限値以上のプロセス数を 起動させる必要が生じました。 具体的なプロセスは ・httpd (上限:200) ・ntpd (上限:1) ・crond (上限:1) ・HeartBeat (上限:6) の4つです。このうち、httpdについてはhttpd.conf内のStartServers及び MinSpareServersの値を変更することで解決しました。 しかし後3つのプロセスについて、プロセス数を増やす方法がわかりません。 尚、上限監視のロジックはps -ef | grep [プロセス名]で行数をカウントするという ものですので、psコマンドで表示されればゾンビでも何でも構いません・・ 宜しくご教示お願いいたします。

  • コマンドプロンプトを表示せずにプロセスの起動

    VB.NETでソースファイルをJ2sk142(javac.exe)に渡してコンパイルの結果をコマンドプロンプトではなくVBのTextBoxに表示するプログラムを作成しています。 でも、プロセスを起動すると一瞬だけプロンプトが表示されます。 これを表示させない方法はありますでしょうか? With Process1 .StartInfo.FileName=JAVACPATH .StartInfo.Arguments=TextBox.Text .StartInfo.WorkingDirectory=ProPath .StartInfo.UseShellExecute = False .StartInfo.ErrorDialog = True .EnableRaisingEvents = True .StartInfo.RedirectStandardOutput = True .StartInfo.RedirectStandardError = True .StartInfo.WindowStyle = ProcessWindowStyle.Hidden End With Try Process1.Start() OutPutTextBox.Text &= Process1.StandardOutput.ReadToEnd OutPutTextBox.Text &= Process1.StandardError.ReadToEnd Process1.WaitForExit() Catch ex As Exception

  • プロセスの再起動

    VC++にてメールチェッカのソフトを実装しているのですが、プロセスの再起動の実装方法がどうしてもわかりません。 何かいい方法がありましたら教えていただけないでしょうか?