2012-08-02 7 views
7

プロセスが実行中であるかどうか確認したいと思います。私はシステム( "")コマンドを使用したくありません。プロセスが実行されているかどうかを知るCベースの関数はありますか?プロセスがCで実行されているかどうかを調べる方法は?

私はプロセス名を提供したいと思いますし、実行されているかどうかを知りたいのですが。

おかげで、

+0

具体的に何をしたいのかを具体的に説明する必要があると思います。問題のプロセスのPIDまたは名前を知っていますか? –

+0

私はプロセス名を知っています、はい。 – Kitcha

+0

この関連する質問を見ることができます:http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – rayd09

答えて

9

確かに、kill(2)を使用します。

#include <sys/types.h> 
#include <signal.h> 

int kill(pid_t pid, int sig); 

sigが0であれば、何の信号が送信されませんが、エラーチェックがまだ行われています。これは、プロセスIDまたはプロセスグループIDの存在をチェックするために使用できます。

だからあなたがチェックし、エラー(ESRCH)を取得するかどうかを確認したいプロセスのプロセスIDにkill(pid, 0)を呼び出します。

+0

これは、プロセスIDを持っているかどうかを確認する良い方法ですが、プロセス名のみを持っています。 – cegfault

+0

@cegfault:それは本当です。同じ名前のプロセスがたくさんあるかもしれないので、名前は実際にあなたに "プロセス"を教えてくれません。 OPの質問にはいくつかの重要な詳細が欠けていると思います。 –

+0

"プロセス名"はありません:execve(argv [0]、NULL、NULL); ' – wildplasser

0

現在実行中のすべてのプロセスについてファイルシステム/procをスキャンし、cmdlineのエントリが特定のプロセスに必要なものと一致するかどうかを確認できます。

ただし、競合状態があります。このプロセスは、実行中であると判断した後に終了する可能性があります。

プロセスがまだ実行中かどうかを確認するには、プロセスを起動した方がよいでしょう。次に、子供が死亡すると、SIGCHLDが得られ、waitpid(-1,..)を使用して、どの子供が死亡したかを知ることができます。

2

Linuxでは、これを行う別の方法として、/procディレクトリの内容を調べることがあります。番号の付いたディレクトリはプロセスIDですが、cmdlineファイルを含むサブディレクトリにはコマンドの名前が表示されます。例えば

/proc/1234/cmdlineあなたはより多くの情報のためproc(5)を参照してくださいC.標準のファイルアクセス機能を使用して、PIDのにこの方法を名前をマップすることができ1234のIDを持っているfoo、プロセス値fooを、含まれている場合。

関連する問題