9

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

プロセス名を提供し、実行中かどうかを知りたいです。

ありがとう、

4

4 に答える 4

12

はい、使用します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)。

于 2012-08-02T21:21:42.253 に答える
2

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

たとえば/proc/1234/cmdline、値が含まれている場合foo、プロセスfooの ID は 1234 です。C の標準ファイル アクセス関数を使用して、この方法で名前を PID にマップできます。詳細については、を参照proc(5)してください。

于 2012-08-02T21:29:53.907 に答える
1

これは興味深いかもしれません: http://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c.html

これを行うための「従来の最良の方法」は、/procフォルダーを読み取ることです。http://procps.sourceforge.net/を参照している詳細については、この質問を参照しください。

于 2012-08-02T21:30:37.610 に答える
0

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

ただし、競合状態があります。実行中であると判断した後、プロセスが終了する場合があります。

プロセスがまだ実行されているかどうかを知る確実な方法は、プロセスを起動した方法です。次に、子供が死んだとき、あなたは取得し、どの子供が死んだかを見つけるためにSIGCHLD使用することができます。waitpid(-1,..)

于 2012-08-02T21:28:34.253 に答える