Linuxで動作しているCプログラムは、別のプログラムが動作しているかどうかを名前で調べる必要があります。どうやってするの?LinuxのCプログラム:別のプログラムが実行されているかどうかを調べる方法
2
A
答えて
6
あり基本的に2つの方法があります。/proc
を解析する
- 使用
popen("pgrep yourproc", "r");
、その後fgets
使用opendir
とreaddir
- それからは - これは
ps(1)
が
ないクリーン何をするか、基本的ですが、私はこれらの最初のものと一緒に行くだろう。
2
unixでは、プログラムは実行されません。 プロセスが実行されます。プロセスはプログラムのインスタンスとして見ることができます。プロセスは、別の名前で動作したり、名前を変更したり、まったく名前を持たないことがあります。また、実行時には、プログラムは(ディスク上に)終了しなくても、コアにのみ存在することさえできます。例えば次のプログラムを取る:(?は/ dev/nullが実際に実行されて、私はそうは思いません...)
#include <unistd.h>
#include <string.h>
int main(int arc, char **argv)
{
if (strcmp(argv[0], "/dev/null")) {
execl(argv[0], "/dev/null", NULL);
}
sleep (30);
return 0;
}
0
をあなたがこれを行うには「正しい」やり方を見たい場合は、チェックアウト次
3
Travesing /proc
は本当にpopen()
よりもはるかに困難ではありません。基本的には3つのことを行います
- すべての数字は
/proc
という形式で入力してください。 /proc/<PID>/command
/- によってコマンドの呼び出しを取得します。必要なプロセスの名前に対して正規表現を実行します。
わかりやすくするためにいくつかのエラー処理を省略しましたが、それはあなたが望むように何かする必要があります。
int
main()
{
regex_t number;
regex_t name;
regcomp(&number, "^[0-9]+$", 0);
regcomp(&name, "<process name>", 0);
chdir("/proc");
DIR* proc = opendir("/proc");
struct dirent *dp;
while(dp = readdir(proc)){
if(regexec(&number, dp->d_name, 0, 0, 0)==0){
chdir(dp->d_name);
char buf[4096];
int fd = open("cmdline", O_RDONLY);
buf[read(fd, buf, (sizeof buf)-1)] = '\0';
if(regexec(&name, buf, 0, 0, 0)==0)
printf("process found: %s\n", buf);
close(fd);
chdir("..");
}
}
closedir(proc);
return 0;
}
+0
これは動作しますが、何らかの理由で「^ [0-9] + $」のプラス記号を「^ [0-9] \\ + $」にエスケープしなければなりませんでした – icecream
関連する問題
- 1. LinuxのCプログラムから複数のCプログラムを実行する
- 2. 別のプログラムが実行されている場合のプログラムの実行方法c#または.bat
- 3. 別のプログラムの下でCプログラムを実行する方法
- 4. C/C++プログラムの実行時間を調べる
- 5. Windowsサーバが特定のプログラムを実行しているかどうかをLINUXから判断する方法
- 6. プロセスがCで実行されているかどうかを調べる方法は?
- 7. C++プログラムから別のプログラムを実行するにはどうすればいいですか?
- 8. レジストリからインストールされているプログラムのバージョンを調べる
- 9. Linuxプロセスが与えられた引数で実行されているかどうかをシェルスクリプトで調べる
- 10. C++プログラムの特定の関数がどこからインポートされているかを調べるには?
- 11. rubyスクリプトがウィンドウで実行されているかどうかを調べる
- 12. javascript関数が既に実行されているかどうか調べる
- 13. Cの別のプログラムからプログラムを実行
- 14. unordered_mapが使用されている場合のC++プログラムの実行方法
- 15. 別のJavaプログラムの中でJavaプログラムを実行する方法
- 16. プログラムがサブプロセスでクラッシュしたかどうか調べるには?
- 17. 別の.netアセンブリがロードされているかどうかを調べる
- 18. どの行がクリックされたかを調べる方法は?
- 19. doctestでコードが実行されているかどうかを調べる方法は?
- 20. .NETプログラムが実行されているかどうかを確認する方法
- 21. ターミナルサーバーサービスが実行されているかどうかをプログラムで確認する方法
- 22. MATERIALIZED VIEW更新プログラムが実行されているかどうかを確認する方法?
- 23. 別のプログラムが実行されているときにプログラムが起動しないようにする(Windows)
- 24. Cプログラム - コンパイル時に2つの列挙型が同期しているかどうかを調べる
- 25. Objective-Cプログラムのコードカバレッジを調べる方法は?
- 26. UITableViewCellがドラッグされているかどうかを調べる方法は?
- 27. PowerShell:SQLクエリで0行が返されるかどうかを調べる方法
- 28. C言語のプログラムで問題の数値が100で割り切れるかどうかを調べる
- 29. どのAsyncTaskが実行されているかを調べるには?
- 30. EclipseサーバーからLinuxサーバーへのJavaプログラムの実行方法
@Mat - "by name"は、プログラム名を引数としてC文字列として関数呼び出しを実行し、ブール型の戻り値を取得することを意味します。いいえの場合はfalseです。この名前付きプログラムは実行されていません。私は何も試していないが、グーグルでしか見つからなかった。私はシステム(ps)または同様のものを試してみるだろうが、もっと単純でより簡単なものを望んでいる。 –