そのため、コマンドラインでコマンドを使用せずに、実行中のプロセス(プロセスIDを持っている)のフルパスを取得できるようにしたいのです。誰かがこれを行う方法について何かアイデアがありますか?
私はPIDを持っていますが、PIDを渡すことで、そのプロセスのフルパスをchar *として返すことができる関数はありますか?
の実行可能ファイルreadlink("/proc/<pid>/exe", buf, bufsize)
へのパスを取得するために使用します。<pid>
これはLinuxで機能しprocfs
ますが、利用可能であれば(通常は利用可能です)。
使用例:
int get_exe_for_pid(pid_t pid, char *buf, size_t bufsize) {
char path[32];
sprintf(path, "/proc/%d/exe", pid);
return readlink(path, buf, bufsize);
}
-1
失敗時に戻り、を設定しますerrno
。
これにより、すべてのシンボリックリンクとディレクトリの相対トークンが展開されます。悲しいことに、それはGNU固有であり、私はそれを-std=gnu99
、のように使用しprintf("%s\n", realpath("/proc/self/exe", NULL))
ます。