• ベストアンサー

pidからstatusを得るAPI

「ps -l」コマンドで出来る事を、 プログラム中から行いたいのですが、 プロセスIDから「S」とか「Z」とかの プロセス状態を得るAPIって 有りますでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4856/10271)
回答No.1

"/proc/プロセスid/stat" というファイルをオープンして、読み込んでください。 第3項目がステータスです。

tadashi_s
質問者

お礼

お忙しいなか、回答有り難う御座いました。

tadashi_s
質問者

補足

RedHat Linuxには、確かに/proc/<pid>というディレクトリが有ります。 しかし、MacOS XもUNIX/Linux系で同じかと思いましたが、異なりました。 Macの場合、system("ps -o pid,stat > 一時ファイル")で、情報を得る事にしました。

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

関連するQ&A

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

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

  • c言語でプロセスIDを調べたい

    unixのコマンドで ps aux と打つと "ユーザー名" "プロセスID"  。 。 。 。 がでますけど、この2番目の"プロセスID"を調べる関数ってありますか? ※というのも、プロセスID(ジョブ番号)を引数にして、そのプロセスが終了したら何か処理をさせるというプログラムを作りたいからです。よろしくお願いします。

  • PIDが変わってなにか問題がありますか?

    psコマンドで、あるプログラムのPIDを調べ、kill -HUP しました。 すると、PIDが変化してしまったのですが、これは正常な結果なのでしょうか。 また、これによる動作不具合(kill -HUP したプログラムが)を起こしたりする可能性はあるのでしょうか? kill -HUP したものは、sendmail です。

  • プロセス内のAPI関数名を知りたい

    プロセスに読み込まれているAPIモジュールの名称一覧は、CreateToolhelp32SnapshotでTH32CS_SNAPMODULEとプロセス番号を指定すれば得られます 同じようにプロセスに読み込まれているAPI関数名の一覧表を簡単に得る方法はありますか? ---------------------------------------- 上述のごとくCreateToolhelp32Snapshotで得たモジュール一覧表がありますのでプログラムではなく、モジュール内の関数名を手操作・手調べでも結構ですから簡単に知る方法をご教授ください 【理想を言えばプログラム的に知る方法です お願いします】

  • js api

    javascriptにおいてapiと関数同じ物なのでしょうか? 以下引用 APIとは、アプリケーションプログラムインターフェイスの略語で、プログラミングの際に使用できる命令や規約、関数等の集合の事を指す。 ソフトウェア開発の際、いちから全てを作るより、APIを利用すればもともとあるプログラムを呼び出して、その機能を組み込んだソフトウェアを開発することができる。 APIの中に関数が含まれているという事でしょうか?

  • windowsのプロセスIDやスレッドIDの使い道

    win32APIで取得したプロセスIDやスレッドIDの使い道について教えてください。 CreateProcessなどで取得したプロセスのハンドルやスレッドのハンドルはwin32APIで使う場面がありますが、プロセスIDやスレッドIDの使い道がわかりません。 どのような場面でプロセスIDやスレッドIDを使うのでしょうか?具体的にこんな事をするときに使うよなどあれば教えていただきたいです。 プロセスIDやスレッドIDを引数にとるAPI関数などがあれば教えていただきたいです。

  • STATUSのZフラグについて

    STATUSのZフラグについてお聞きしたい事があります。 参考書を読んでみると、「Zフラグは、計算結果や代入結果が'0'となったことを表す指標のことをいう。数値の一致を知るには引き算をしてZフラグを見るプログラムを書く」とあります。 サンプルプログラムを見ても'0'か'1'しかZフラグには存在しない様に思われますが、現在私が組んでいるプログラムでは、プログラムが1行進むにつれてZフラグの数字が1ずつ増えていってしまい、計算結果を確認する事が出来ません。これは単に私のプログラムの設定が間違っているのでしょうか。もしソースがあれば判断出来るのであれば後ほどアップしますのでどなたか教えてもらえませんか。PICアセンブラで組んでいます。宜しくお願い致します。

  • Cでファイルのロック元の情報を出力するには

    ファイルのロックに関する情報を表示するプログラムを作ろうとしています。 flock構造体のl_pidが、ロックしているプロセスのIDだということまでわかりました。 このl_pidから、ユーザや起動コマンド等を知るにはどうすればいいのでしょうか。

  • pthread_self APIの高速化

    HP-UX上でCを使ってスレッドプログラムを書いています。 プログラム内部でスレッドIDを変数に保持して、その変数を元に、pthread_detachなどのAPIをコールするような作りになっているのですが、pthread_self APIで毎回、自スレッドIDを取得するようにすると、処理スピードは遅くなるのでしょうか。(どれくらい?気にするほど?) 感覚的には遅くなりそうな気がしてはいますが、プログラム変数の場合だと、予期しない変数の書き換えが発生した場合(これはこれでバグですので対応が必要になりますが・・・)などに余計な影響を受けることになり、どっちが得策なのか考えあぐんでいます。

  • fork()のpidとppid

    システムコールのfork()の勉強をしています。 fork()によって作られたプロセスのそれぞれのpidとppidを知りたいのですが頭がこんがらがってしまいました。 「forkシステムコールは親プロセスには作成された子プロセスのプロセスIDが、子プロセスには0が返る」とあったので以下のコードの場合 pid = fork(); if(pid == 0) printf("%s, child process\n", msg); else printf("%s, parent process\n", msg); 子のpidが0のためifが実行され、親はelseが実行される というところまで理解できたのですが このとき親のpidは子のID、子のpidは0なのでしょうか? 教科書の図(添付)を見ると親のpidは0で子、孫になるにつれてpidが大きくなっていてよくわからなくなってしまいました。 例えば以下のようなコードがあった場合、 pid_t pid; // メインプロセスのPIDは42 pid = fork(); // プロセスをPID=11で作成 if (pid == 0) { pid_t pid2 = fork(); // プロセスをPID=25で作成 if (pid2 == 0) { sleep(20); exit(0); } waitpid(pid2,NULL,0); exit(0); } else { pid_t pid3 = fork(); // プロセスをPID=89で作成 if (pid3 == 0) { sleep(10); printf("** ONE **\n"); exit(0); } pid_t pid4 = fork(); // プロセスをPID=123で作成 if (pid4 == 0) { sleep(30); printf("** TWO **\n"); exit(0); } } sleep(20); exit(0); それぞれのプロセスのpidとppidはどうなるのでしょうか? 説明がうまくできないのですが、 分かる方いましたら回答よろしくお願いします。