Aar*_*kan 28 macos osx-snow-leopard
我想知道Mac OS上进程的工作目录(10.6).我尝试在ps命令的输出中找到PWD环境变量,但那里没有PWD变量.有没有更好的方法在mac上运行进程找到它?
Gor*_*son 38
lsof -d cwd将打印所有进程的当前工作目录.如果要显示您不拥有的进程的信息,则需要以root身份运行它(即sudo用作前缀).如果您只想显示某些程序或进程的信息,请使用eg lsof -a -d cwd -c programname或lsof -a -d cwd -p processid(注意:在这两种情况下,该-a标志表示其他标志的限制得到"和"编辑在一起). lsof非常复杂,有更多选项,请阅读其手册页以获取更多信息.
虽然Gordon Davisson的答案很棒,但是如果你想在没有打电话的情况下从代码中做到这一点lsof,那么这就是你需要的代码.它的灵感来自lsof来源和这篇博文.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <libproc.h>
int main (int argc, char* argv[])
{
int ret;
pid_t pid;
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
struct proc_vnodepathinfo vpi;
if (argc > 1) {
pid = (pid_t) atoi(argv[1]);
ret = proc_pidpath (pid, pathbuf, sizeof(pathbuf));
if (ret <= 0) {
fprintf(stderr, "PID %d: proc_pidpath ();\n", pid);
fprintf(stderr, " %s\n", strerror(errno));
return 1;
}
printf("proc %d executable: %s\n", pid, pathbuf);
ret = proc_pidinfo(pid, PROC_PIDVNODEPATHINFO, 0, &vpi,
sizeof(vpi));
if (ret <= 0) {
fprintf(stderr, "PID %d: proc_pidinfo ();\n", pid);
fprintf(stderr, " %s\n", strerror(errno));
return 1;
}
printf("proc %d cwd: %s\n", pid, vpi.pvi_cdir.vip_path);
// printf("proc %d root: %s\n", pid, vpi.pvi_rdir.vip_path);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此示例代码将生成如下输出:
proc 44586 executable: /bin/zsh
proc 44586 cwd: /private/tmp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12509 次 |
| 最近记录: |