- ベストアンサー
プロセスIDの取得方法
a-kumaの回答
- a-kuma
- ベストアンサー率50% (1122/2211)
toysmith> 多数の子プロセスを生成した場合、単一の子プロセスを狙い撃ちで里子に出すことが出来ません 親プロセスで SIGCHLD を無視するのは、「細かいことは知らんよ」という場合に 限って、とした方が良いでしょう。 一般的には、親プロセスで SIGCHLD を捕捉して、wait() をする、というかたちを とります。 一番おおざっぱな形は以下のような感じ。 void sig_handler(int sig) { wait(NULL); signal(SIGCHLD, sig_handler); } int main(void) { signal(SIGCHLD, sig_handler); ... } もし、私がやるとしたら wait() よりも waitpid() を使うかな。 捕捉するシグナルが(親自身も含めて)ひとつとは限らないから、シグナルハンドラを ひとつにしておいて int sig_handler(int sig) { if (sig == SIGCHLD) { int stat; while (waitpid(-1, &stat, WNOHANG) > 0) { /* stat 次第では、何か処理が有るかも */ } } signal(sig, sig_handler); } ってな感じ。
関連するQ&A
- ウインドウのプロセス終了について
今C++でタスクバーのウインドの列挙を行い、またプロセスIDの取得を できたのですがこれらを終了させる方法がわかりません。 いろいろ調べてみたのですが、UNIXでのkillコマンドに匹敵する 関数がわかりません。 自分が調べたところ使えそうなのは。 CloseMainWindow関数 TerminateProcess関数 などができそうなのではと考えています。 また http://akky.cjb.net/mfc/appclose.html ここに書いてあるソースを打ってみたのですが、 思うように動きませんでした。 どうしたらよいでしょうか。 具体的な方法(プログラム)がほしいです。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- プロセスIDの取得方法について
下に同様の質問をしたのですが、削除方法分からない為、再度質問させていただきまし。 VB5.0を利用しています。 VBで書いたexeを実行した際に、そのプロセスID(自分の)は、GetCurrentProcessIdを利用すれば取得できると分かりました。 が、プログラム内でExcelを下記の様にオブジェクトを作成した場合、そのプロセスIDをどうやって取得すればいいのでしょうか? ご存知の方居ましたら、教えて下さい。 Set ExcelObj = CreateObject("Excel.Application") ここで起動?されたExcelのプロセスIDを取得したいのですが。
- ベストアンサー
- Visual Basic
- プロセスIDの取得の方法。
使用言語:C OS:NT4.0WS プロセスビューアで表示されるような、プロセスIDやプロセス名を 取得する方法を探しています。 Cの標準関数で無ければAPI関数での方法でもどちらでも構わないので よろしくお願いします。
- ベストアンサー
- C・C++・C#
- プロセスIDの再利用
こんちにちは、honiyonです。 親子関係のない全く別々に起動されたプロセスの終了するプログラムを作ろうと思います。 .NETではシステムで一意なIDというものがある、という情報を見かけたのですが、.NETは使用したくないのでプロセスIDを使って監視出来ないかと考えています。 プロセスIDを使って、定期的にポーリングする方法をとったとき、 プロセスIDが再利用されてしまう事で終了を検知出来ない事があるのではという疑問が出てきました。 UNIXでは極力重複しない(再利用しない)という方針があるようですが、Windowsではそのような仕組みはありますでしょうか? そのような仕組みがあれば、再利用による検知ミスは無視出来るレベルの問題かなと考えています。 また、プロセスIDでの監視以外で良い手段がありましたら、是非ご教授頂ければ幸いです。 宜しくお願いします(..
- 締切済み
- C・C++・C#
- javaのプロセスについて
UnixやLinuxなどで、javaのプロセスを常駐させたいのですが、何か方法はありますでしょうか。 javaという名前であれば何でもいいので、テスト的に起動したいです。 (プロセスをkillするテストをするために、使用します)
- ベストアンサー
- Linux系OS
- 起動しているアプリケーションのプロセスIDを取得したい.
現在,起動しているアプリケーションのプロセスIDを取得したいと考えています. プロセスIDを取得するコマンドはあるのでしょうか? 環境:Windows2000+SP3
- 締切済み
- Windows NT・2000
- プロセスIDからウィンドウハンドルを取得する方法
以下の方法を調べていますが、プロセスIDからウィンドウハンドルを取得する方法がわかりませんでした。 (1)自分がCreateProcessで生成したプロセスのウィンドウハンドル (2)自分とは関係ないプロセスで、プロセスIDだけ判明しているプロセスのウィンドウハンドル ご存知の方、ご教授願います。 <環境> WindowsXP VC++6.0
- ベストアンサー
- C・C++・C#
- c言語でプロセスIDを調べたい
unixのコマンドで ps aux と打つと "ユーザー名" "プロセスID" 。 。 。 。 がでますけど、この2番目の"プロセスID"を調べる関数ってありますか? ※というのも、プロセスID(ジョブ番号)を引数にして、そのプロセスが終了したら何か処理をさせるというプログラムを作りたいからです。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 既存プロセスからプロセスのプライマリースレッドIDの取得方法
いつもお世話になってます。 プロセスに関することで分からないことがあるため、どなたか御教授して下さい。 只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか? 具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッドに対してPostThreadMessageで任意のメッセージが送れるという仕様です。 対象のプロセスがウィンドウを持っていれば、EnumWindows関数を使用してウィンドウに対してPostMessageができるというのは分かったのですが、今回対象のプロセスがウィンドウを持たない為、上記のようにスレッドに対してメッセージを送るようになっています。 CreateProcess呼び出し時にはスレッドIDが取得できることから、プロセスID、または、プロセスハンドルからスレッドIDが取得できるのではないかなと考えられるんですが。。。。
- ベストアンサー
- C・C++・C#
補足
非常に申し訳ありません。a-kumaさん、toysmithさん。 いまだによくわかりません。 言いたいことはわかる気がするのですが、どういうふうにプログラムを組めばよいのか・・・。 =============================== void sig_handler(int sig) { wait(NULL); signal(SIGCHLD, sig_handler); /* sig_handlerとは? */ } int main(void) { signal(SIGCHLD, sig_handler); ... pid_t pid_c; pid_c = fork(); if(pid_c == 0) { execl("aa", NULL); } else if (pid_c < 0) { } ・・・・ /* プロセスを殺す処理? */ } ======================= 上記のようなプログラムになるのでしょうか? 子プロセスを殺す処理はどうなるのでしょうか? ちなみに子プロセスはシェルです。 質問ばかりで申し訳ありません。よろしくお願い致します。