プロセスが実行されているかどうかを確認したいと思います。system("") コマンドを使用したくありません。プロセスが実行されているかどうかを知らせる C ベースの関数はありますか?
プロセス名を提供し、実行中かどうかを知りたいです。
ありがとう、
はい、使用しますkill(2)
:
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
sig が 0 の場合、シグナルは送信されませんが、エラー チェックは実行されます。これは、プロセス ID またはプロセス グループ ID の存在を確認するために使用できます。
kill(pid, 0)
そのため、確認したいプロセスのプロセス ID を呼び出して、エラーが発生するかどうかを確認してください ( ESRCH
)。
Linux では、これを行う別の方法として、/proc
ディレクトリの内容を調べることが含まれる場合があります。番号付きのディレクトリはプロセス ID であり、cmdline
ファイルを含むサブディレクトリはコマンドの名前を示します。
たとえば/proc/1234/cmdline
、値が含まれている場合foo
、プロセスfoo
の ID は 1234 です。C の標準ファイル アクセス関数を使用して、この方法で名前を PID にマップできます。詳細については、を参照proc(5)
してください。
これは興味深いかもしれません: http://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c.html
これを行うための「従来の最良の方法」は、/proc
フォルダーを読み取ることです。http://procps.sourceforge.net/を参照している詳細については、この質問を参照してください。
/proc
現在実行中のすべてのプロセスのファイルシステムをスキャンして、cmdline
エントリがその特定のプロセスに必要なものと一致するかどうかを確認できます。
ただし、競合状態があります。実行中であると判断した後、プロセスが終了する場合があります。
プロセスがまだ実行されているかどうかを知る確実な方法は、プロセスを起動した方法です。次に、子供が死んだとき、あなたは取得し、どの子供が死んだかを見つけるためにSIGCHLD
使用することができます。waitpid(-1,..)