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プログラムを実行する方法
- 3. プロセスがCで実行されているかどうかを調べる方法は?
- 4. レジストリからインストールされているプログラムのバージョンを調べる
- 5. C++プログラムから別のプログラムを実行するにはどうすればいいですか?
- 6. rubyスクリプトがウィンドウで実行されているかどうかを調べる
- 7. どの行がクリックされたかを調べる方法は?
- 8. Cの別のプログラムからプログラムを実行
- 9. doctestでコードが実行されているかどうかを調べる方法は?
- 10. 別のプログラムが実行されているときにプログラムが起動しないようにする(Windows)
- 11. MATERIALIZED VIEW更新プログラムが実行されているかどうかを確認する方法?
- 12. ターミナルサーバーサービスが実行されているかどうかをプログラムで確認する方法
- 13. .NETプログラムが実行されているかどうかを確認する方法
- 14. プログラムがサブプロセスでクラッシュしたかどうか調べるには?
- 15. UITableViewCellがドラッグされているかどうかを調べる方法は?
- 16. どのAsyncTaskが実行されているかを調べるには?
- 17. Objective-Cプログラムのコードカバレッジを調べる方法は?
- 18. Cプログラム - コンパイル時に2つの列挙型が同期しているかどうかを調べる
- 19. Excelが実行されているか調べる
- 20. TransactionScopeがコミットされているかどうかを調べる
- 21. ビジュアルスタジオでlinuxの下で書かれたプログラムを実行する方法
- 22. solrサーバーが実行中であるかどうかを調べる方法
- 23. linux:実行中のinit.dスクリプトがシステム起動シーケンスの一部として実行されているかどうかを調べる
- 24. 実行時にLinuxカーネルモジュールが存在するかどうかをプログラムで確認してください。
- 25. クラスが参照されているかどうかを調べるC#
- 26. cプログラムでLinuxコマンドを実行
- 27. C++プログラムからC#exeを実行する方法
- 28. Cプログラム内からプログラムを実行
- 29. 別のJavaプログラムからRMIプログラムを実行する
- 30. C#の - プログラムが開かれているユーザが、私のプログラム
@Mat - "by name"は、プログラム名を引数としてC文字列として関数呼び出しを実行し、ブール型の戻り値を取得することを意味します。いいえの場合はfalseです。この名前付きプログラムは実行されていません。私は何も試していないが、グーグルでしか見つからなかった。私はシステム(ps)または同様のものを試してみるだろうが、もっと単純でより簡単なものを望んでいる。 –