• ベストアンサー

プロセスIDからプロセスの有無を確認する方法

PHPのCLIからの実行で排他制御を行おうと思い、ある程度出来てきたのですが、保存しておいたプロセスIDからプロセスの有無を確認する方法が分かりませんでした。 簡単な方法としてはsystemやexecを使用して ps -ef|grep xxxx などとすれば良いかと思うのですが、grepそのものが引っ掛かってしまったりしてあまり美しくありません。リファレンスを一通り読んで関数を探してみたのですが適切な関数が見当たりませんでした。 何か良い方法をご存知の方がいらっしゃいましたらご教示頂けますでしょうか。宜しくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • kaz33
  • ベストアンサー率60% (20/33)
回答No.1

普通に $ ps プロセスID ではダメなのでしょうか? 上記方法なら該当プロセスIDだけ表示されますが・・ 詳細が必要なら $ ps l プロセスID とか... aやxを指定するとps自体も表示されてしまいますね。

deka_pink
質問者

お礼

なるほど! パラメータを良く調べていなかったのですが、そんな手があったのですね。 理想はPHPで直接プロセスの有無を調べたいところですが、これはこれで良さそうです。

関連するQ&A

  • 24時間以上たった、プロセスの起動日時を調べる方法

    24時間以上たった、プロセスの起動日時を調べる方を教えて下さい。 以下のようにすれば、24時間以内のプロセス起動に日時は、わかるのですが、24時間以上たったものは、日付はでますが、時間が『?』となります。何か、良い知恵を貸して下さい。 ps -ef | grep プロセスID

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

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

  • 実行中のプロセス数をカウントしたい

    ネットで以下コマンドを見つけて実行しました。 ps -ef | grep -v grep | grep httpd 実行結果は/usr/sbin/htpdが9行表示 この9行をカウントしたい為、 ネットで以下コマンドを見つけて実行しました。 ps -ef | grep -v grep | grep httpd | wc 実行結果は『9 72 576』が表示 上記の結果で9のみを表示させるコマンドがあれば 教えていただけないでしょうか。 また、実際にカウントしたいプロセスは以下例のように 半角スペースと()をふくんでおり 上記httpdのようにうまくいきませんでした。 例:test (rei) 半角スペースと()を含んだプロセス数をカウントするコマンドがあれば 教えていただけないでしょうか。

  • コマンド実行の成功有無を知りたい

    現在、PHP上からexec関数を使用してcdrecodのコマンドを 実行させCDを焼く処理を作成しているのですがCD作成の 成功有無を取得しようと思ってもどうすればよいかわかりません。 execでtrueやfalseが取得できれば理想なのですが何か良い方法は ありませんでしょうか?

    • ベストアンサー
    • PHP
  • grep でパラレル検索するには

    あるディレクトリいかに置かれているソースコードの中で特定のパターン (文字列) を含むファイルの一覧を取得するのに grep を使って検索してい るのですが、もう少しよい方法がないかと試行錯誤しています。 [現行法] find . -type f | \ while read line; grep -qP pattern "$line" && echo $line; done そこで、使用しているサーバのCPU 数が8であることに目を付け、マルチ プロセスもしくはマルチスレッドの仕組みを用いて8多重でgrepを実行で きる仕組みを考えています。 最初に考えたのは以下のような方法です。 ・pthread を利用する。 ・各レッドで system 関数を使用して grep を実行する。 ・子プロセスは標準入力をパイプから受け取るようにする。 ・検索対象となるファイル一覧の読み込みは mutex を用いて制御する。 →system 関数はシェル経由で grep をコールするようで、オーバーヘッド が気になるなどの理由により却下。 次に考えたのは以下のような方法です。 ・pthread を利用する。 ・各スレッドで fork し、子プロセスで grep を実行する (exec)。 ・子プロセスは標準入力をパイプから受け取るようにする。 ・検索対象となるファイル一覧の読み込みは mutex を用いて制御する。 →デッドロックの問題が解決できずに断念。 pthread で fork を使う場合は直ぐに exec するようにしないとデッド ロックする可能性があるという記事をネット上で見つけました (標準入力 をパイプから受け取るようにする処理があるため直ぐには exec できな い)。で、実際にもそのようになってしまいました。 そして、最終的に考えているのが以下のような方法です。 ・fork を利用する。 ・各プロセスでさらに fork し、孫プロセスで grep を実行する (exec)。 ・孫プロセスは標準入力をパイプから受け取るようにする。 ・検索対象となるファイル一覧の読み込みはセマフォを用いて制御する。 でも、本当にこのようにマルチプロセス+セマフォを使う方法でしか 「grep でパラレル検索」を実現することはできないのでしょうか? pthread で実現することには失敗してしまいましたが、もう少し改良して 成功できないかと考えているのですが・・・。 (かと言って、あちこち mutex でロックしてしまうと、せっかくのスレッ ドが生かされない?)

  • tomcat psコマンドでスレッドのプロセスが見れません。。

    はじめまして。 JDK1.4.2-13 + tomcat5.0.28 + RHEL3でWEBアプリ環境を 構築しています。 Linux上ではJavaの1スレッドが1プロセスとして 実行されていると思いますが、この1スレッドをpsコマンドが 見た時になぜか表示されません。tomcat本体のjavaプロセスは 確認できるのですがスレッドに当たるプロセスが見えません。 topコマンドでは処理させた時にjavaというプロセスが 処理に応じて上位に表示されるのですが、この時に、 ps -ef | grep java でJavaプロセスを確認しようとしてもどうしても 見ることができません。。 linux上でtopコマンドとpsコマンドでは表示されるプロセス に違いがあるのでしょうか? WEBで調べてみてもみなさんpsコマンドでtomcatのJavaスレッド プロセスが確認できているようなので質問させて頂きました。 宜しくお願いします。

    • ベストアンサー
    • Java
  • FEDORA 4 MySQL プロセス 死活監視

    タイトル通り、mysqld のプロセスがなければ、管理者宛にメールを送りたいと考えています。また、シェル又は、PHPをcron(1分間隔)で定期実行もあわせて考えています。 考えたシェル:mysqlch.sh #!/bin/bash mail_body_tmp=/tmp/ps_chk.tmp MAIL_TO=root@localhost rm -f $mail_body_tmp for PROC in $@ do ps -ef | awk {'print $8'} | grep $PROC | grep -v grep | grep -v $0 1>&2>/dev/null if [ ${?} -ne 0 ] ; then echo Process \"$PROC\" Down in $HOSTNAME >> $mail_body_tmp fi done if [ -e $mail_body_tmp ]; then mail -s "Process Down Information. $HOSTNAME" $MAIL_TO < $mail_body_tmp logger -t svchk < $mail_body_tmp fi 実行するときは、mysqlch.sh mysqld しかし、プロセスDOWNでも、メールがきません。 修正する所、またはこの方がいいというアドバイスお願いいたします。

  • 子プロセスの管理

    forkした後の子プロセス管理で、終了をsignalで管理しようと思ってるんですが、forkを2回行なえばゾンビ化を防げると書いてありました。この二つの方法に違いはあるんですか?メリット・デメリットがよくわかりません。ちなみに子プロセスからの結果や終了を待つ様なプログラムではなく、ただexec関数での別処理を行なうために子プロセスを作成するだけです。 宜しくお願いします。

  • UNIXの「grep」コマンドについて質問です。

    他の場所で一度同じ質問をしたのですが、 明確な理由がわかりませんでしたため、お願いいたします。 業務に関係の無いふとした疑問なのですが、 もしお分かりになる方がいらっしゃいましたら教えてください。 実行中の特定プロセスを調査するときに良く使用する、 「ps -ef | grep XXX」についてです。 この後さらにパイプして"| grep -v grep"とすれば、 コマンド出力結果から、自分自身のプロセスを100%排除できますが、 "| grep -v grep"を付けない場合は、 タイミングによって、自分自身のプロセスが出力されるときと、 されないときがあるようです。 この("| grep -v grep"を使用しない)場合に、 自分自身のプロセスが引っかかったり引っかからなかったりするのには、 何が決め手になっているのでしょうか。 よろしくお願いいたします。

  • シェルについて

    以下のような「プロセスをkillするシェル」を作成しています。 そこで質問なのですが、プロセスが死んだら繰り返しを抜ける ようにしたいと考えているのですが、どのようにすれば実現できるのか 分かりません。 どなたかご存知の方がいらっしゃれば教えていただきたいです。 申し訳ありませんが、宜しくお願いいたします。 #!/bin/csh # 変数定義 set cnt = 3 #リトライカウンタ set i = 1 # ループカウンタ #aaaをkill while ( $i <= $cnt ) ps -ef | grep -v grep | grep aaa | \ nawk '{if(match($NF,"aaa") == 1){system("kill " $2);print "kill: " $2}}' ps -ef | grep -v grep | grep aaa| \ nawk '{if(match($NF,"aaa") == 1){system("kill -9 " $2);print "kill: " $2}}' @ i = $i + 1 end

専門家に質問してみよう