在Windows环境中,有一个API来获取正在运行进程的路径.在Unix/Linux中有类似的东西吗?
或者在这些环境中还有其他方法吗?
在Linux上,符号链接/proc/
具有可执行文件的路径.使用该命令readlink -f /proc/
获取值.
在AIX上,此文件不存在.你可以比较cksum
和cksum /proc/
.
您可以通过这些方式轻松找到exe,只需自己尝试一下.
ll /proc/
pwdx
lsof -p
有点晚了,但所有的答案都是针对linux的.
如果你还需要unix,那么你需要这个:
char * getExecPath (char * path,size_t dest_len, char * argv0) { char * baseName = NULL; char * systemPath = NULL; char * candidateDir = NULL; /* the easiest case: we are in linux */ size_t buff_len; if (buff_len = readlink ("/proc/self/exe", path, dest_len - 1) != -1) { path [buff_len] = '\0'; dirname (path); strcat (path, "/"); return path; } /* Ups... not in linux, no guarantee */ /* check if we have something like execve("foobar", NULL, NULL) */ if (argv0 == NULL) { /* we surrender and give current path instead */ if (getcwd (path, dest_len) == NULL) return NULL; strcat (path, "/"); return path; } /* argv[0] */ /* if dest_len < PATH_MAX may cause buffer overflow */ if ((realpath (argv0, path)) && (!access (path, F_OK))) { dirname (path); strcat (path, "/"); return path; } /* Current path */ baseName = basename (argv0); if (getcwd (path, dest_len - strlen (baseName) - 1) == NULL) return NULL; strcat (path, "/"); strcat (path, baseName); if (access (path, F_OK) == 0) { dirname (path); strcat (path, "/"); return path; } /* Try the PATH. */ systemPath = getenv ("PATH"); if (systemPath != NULL) { dest_len--; systemPath = strdup (systemPath); for (candidateDir = strtok (systemPath, ":"); candidateDir != NULL; candidateDir = strtok (NULL, ":")) { strncpy (path, candidateDir, dest_len); strncat (path, "/", dest_len); strncat (path, baseName, dest_len); if (access(path, F_OK) == 0) { free (systemPath); dirname (path); strcat (path, "/"); return path; } } free(systemPath); dest_len++; } /* again someone has use execve: we dont knowe the executable name; we surrender and give instead current path */ if (getcwd (path, dest_len - 1) == NULL) return NULL; strcat (path, "/"); return path; }
编辑:修正了Mark lakata报道的错误.
我用:
ps -ef | grep 786
将786替换为您的PID或进程名称.
pwdx
此命令将从执行位置获取进程路径.