プロセスが実行中であるかどうか確認したいと思います。私はシステム( "")コマンドを使用したくありません。プロセスが実行されているかどうかを知るCベースの関数はありますか?プロセスがCで実行されているかどうかを調べる方法は?
私はプロセス名を提供したいと思いますし、実行されているかどうかを知りたいのですが。
おかげで、
プロセスが実行中であるかどうか確認したいと思います。私はシステム( "")コマンドを使用したくありません。プロセスが実行されているかどうかを知るCベースの関数はありますか?プロセスがCで実行されているかどうかを調べる方法は?
私はプロセス名を提供したいと思いますし、実行されているかどうかを知りたいのですが。
おかげで、
確かに、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)
を呼び出します。
これは、プロセスIDを持っているかどうかを確認する良い方法ですが、プロセス名のみを持っています。 – cegfault
@cegfault:それは本当です。同じ名前のプロセスがたくさんあるかもしれないので、名前は実際にあなたに "プロセス"を教えてくれません。 OPの質問にはいくつかの重要な詳細が欠けていると思います。 –
"プロセス名"はありません:execve(argv [0]、NULL、NULL); ' – wildplasser
現在実行中のすべてのプロセスについてファイルシステム/proc
をスキャンし、cmdline
のエントリが特定のプロセスに必要なものと一致するかどうかを確認できます。
ただし、競合状態があります。このプロセスは、実行中であると判断した後に終了する可能性があります。
プロセスがまだ実行中かどうかを確認するには、プロセスを起動した方がよいでしょう。次に、子供が死亡すると、SIGCHLD
が得られ、waitpid(-1,..)
を使用して、どの子供が死亡したかを知ることができます。
Linuxでは、これを行う別の方法として、/proc
ディレクトリの内容を調べることがあります。番号の付いたディレクトリはプロセスIDですが、cmdline
ファイルを含むサブディレクトリにはコマンドの名前が表示されます。例えば
、/proc/1234/cmdline
あなたはより多くの情報のためproc(5)
を参照してくださいC.標準のファイルアクセス機能を使用して、PIDのにこの方法を名前をマップすることができ1234のIDを持っているfoo
、プロセス値foo
を、含まれている場合。
あなたはこの興味深い見つけることがあります。これを行うにはhttp://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c.html
「従来と最善の方法を」/proc
フォルダを読み込まれます。 this questionの詳細については、http://procps.sourceforge.net/を参照してください。
具体的に何をしたいのかを具体的に説明する必要があると思います。問題のプロセスのPIDまたは名前を知っていますか? –
私はプロセス名を知っています、はい。 – Kitcha
この関連する質問を見ることができます:http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – rayd09