• ベストアンサー

プロセス監視の方法

どのたかよい方法をご存知の方いらっしゃいましたら、 助力お願いします。 .NETのアプリケーションで、ある特定のプロセスが起動した時に 処理を実行するアプリを作りたいと思っています。 この場合のあるプロセスとは、Notepadとか、Wordとかです。 無限ループで、プロセスを監視しようと思ったのですが、 メモリの消費が多く重たいので、何かよい方法はないでしょうか? 例えば、ある特定のプロセスが起動したら、 それがトリガーとなるような仕組みとか、可能でしょうか? よろしくお願いします。

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

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

無限ループを利用してもメモリ消費が多くなることはないと思うのですが・・・ただし、何も考えないと処理は重くなると思います。 無限ループ内で該当プロセスの存在チェックを1回行ったら、System.Threading.Sleep(0)を入れてみてはどうでしょう? これなら他の処理が行われると、その処理が優先的に行われるようになります。 この方法、仕組みはマルチスレッドの分野になります。

kurus
質問者

お礼

すみません自己解決しました。 ループにするのではなく、Timerによる一定間隔で対応することにしました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プロセス監視

    VisualBasic6.0でWindows2000上で動くプロセス監視プログラムを開発しています。 監視対象a.exe(仮)を起動させた際に取得したPIDを元に起動状態の監視を行っているのですが、ひとつ気がかりとなっていることがあります。 a.exe(仮)エラー停止直後に、他のプロセスb.exeが起動した際に、a.exe(仮)に割り振られていたPIDがb.exeのプロセスに割り当てられ、プロセス監視プログラムがa.exe(仮)の停止を検知できないという可能性はないでしょうか? WindowsでPID割当ての仕組みにお詳しい方、教えてください。 宜しくお願いします。 尚、a.exe(仮)は起動引数付でマルチ起動させるためプロセス名で起動状態を監視することは出来ません。

  • 指定プログラムのプロセスを監視・killするには?

    CGIが不正終了(もしくは無限ループ)して、CPUに負担をかけ続けることで悩んでいます。 topコマンドで負担をかけているプロセスを発見してkillすることは可能ですが、これを自動で実行するようなことはできないでしょうか。 cronを使って1分間に1度チェックし、3分以上同じプロセスが動いている場合にkillしたり、もしくは不具合の起こる特定のプログラム(hoge.cgi等)を監視してkillするということができるようにしたいのです。 自分で考えたのは「top -n 1」で出力して、3分間同じプロセスがCPUに負担をかけ続けている場合にkillできるようにphpなどでプログラミングすることでしたが、もっと簡単にできるような方法がありますでしょうか。

  • 常駐し他のプロセスの起動を取得する方法

    test.exeというプログラムを作ります。 実行すると特定のプロセスの起動を待ちます。 特定のプロセスをnotepad.exeとします。 メモ帳(notepad.exe)が起動されたらtest.exeは何かします。 例えばMessageBox()とかで何か表示します。 どうやればいいのでしょうか? ・特定のプロセスが起動するまで待つ ・起動を検知する というところを教えてください。 VC++です。MFC,ATLなどは使いません。 特にウインドウなどはいらないので数行でできてしまうのであれば winmain()からお願いします。

  • 時間がかかり過ぎたプロセスをキルする方法

    system関数を用いて、ループ内で外部プログラムを連続的に実行しています。ところが、時々、無限ループに近い状態に陥ってしまうデータがあるので、時間制限を設けて、その時間内に終了しない場合には、そのプロセス(外部プログラム)を強制終了させたいのです。 また、もし、強制終了させた場合には、それと分かるように戻り値を返してもらえると、なお良いです。 この仕組みを実現する手法、もしくは、モジュール等を教えて頂けないでしょうか。

    • ベストアンサー
    • Perl
  • プロセスが実行中かどうか調べる方法

    CreateProcessで作ったプロセスが実行中かどうか調べる方法はありませんか。 標準出力に値を吐き出し続けるコンソールアプリケーションから、値を取得して処理をしたいのですが、CreateProcessでつくってパイプで処理しようとしています。ぐぐったところWaitForSingleObjectで待つようなサンプルは見つかったのですが、呼び出したプロセスが終了しないのでこれは使えないので 実行中はずっとループし続けるような感じにしたいのですが。 よろしくお願いします

  • PIDから調べたい

    CentOS5.5を利用しています。 起動しているプロセスがなんの動作をしているか調べる方法はないでしょうか? perlが無限ループしているようなのですが原因となるperlがどのファイルか特定し

  • プロセスIDの再利用

    こんちにちは、honiyonです。  親子関係のない全く別々に起動されたプロセスの終了するプログラムを作ろうと思います。  .NETではシステムで一意なIDというものがある、という情報を見かけたのですが、.NETは使用したくないのでプロセスIDを使って監視出来ないかと考えています。  プロセスIDを使って、定期的にポーリングする方法をとったとき、 プロセスIDが再利用されてしまう事で終了を検知出来ない事があるのではという疑問が出てきました。  UNIXでは極力重複しない(再利用しない)という方針があるようですが、Windowsではそのような仕組みはありますでしょうか?  そのような仕組みがあれば、再利用による検知ミスは無視出来るレベルの問題かなと考えています。    また、プロセスIDでの監視以外で良い手段がありましたら、是非ご教授頂ければ幸いです。  宜しくお願いします(..  

  • ユーザのプロセスを終了する方法

    Windows Server 2008 R2で仮想デスクトップを使用しています。(XenApp 6.5を使用) サーバには80名程度のユーザがログオンして、それぞれアプリケーションを起動しているため、 プロセスの数が非常に多くなります。(同じプロセス名でもユーザ数分起動しているため) 上記の環境であるアプリを終了する際に、サブ画面のプロセスが起動している場合は 一緒に終了するような作りにしたいと考えており、現在のところ以下のWMIのスクリプトを 使用してプロセスの一覧を取得し、for文で一覧から該当するプロセスIDを特定してkillする というような仕組みを検討しております。 Strcomputer = "." Set objWMIService = GetObject("winmgmts:\\" & Strcomputer & "\root\cimv2") Set colitems = objWMIService.ExecQuery("Select * from Win32_Process", , 48) ただ、上記のようにWin32_Processを使用すると、サーバ上で起動している全ユーザの プロセスが検索対象となってしまうため、処理に時間がかかることを懸念しております。 可能であれば、そのユーザだけのプロセスを検索対象としたいのですが、 そのような方法はありますでしょうか? WMI以外の方法でも構いませんので、アドバイスを頂けると助かります。

  • 実行中のプロセス監視して任意のプログラムを実行したい

    常時プロセスを監視し、特定のプログラムが実行されたら別の任意のプログラム(またはコマンド)を自動的に実行するという方法はありますでしょうか? こういった事がフリーウェアであったら嬉しいのですが…

  • プロセスのタイトル

    アプリケーションのログを収集する為、プロセスの増減を監視しているのですが、タイトルの取得方法が分かりません。どなたか教えて下さい。 OS:XP 言語:Visual C++ 6.0 よろしくお願いします。

HCS-WFS01のWi-Fi接続について
このQ&Aのポイント
  • HCS-WFS01を購入したのですがアプリとのWi-Fi接続ができません。対応しているosかどうか不明です。
  • 使用しているモデムはバッファローWSR-2533dhpl-2の2.4GHzです。
  • お使いのスマホはiPhone 12 os15.0です。
回答を見る

専門家に質問してみよう