mac os上运行进程的工作目录

时间:2011-11-30 14:03:20

标签: macos osx-snow-leopard

我想知道Mac OS上进程的工作目录(10.6)。我尝试在ps命令的输出中找到PWD环境变量,但那里没有PWD变量。有没有更好的方法在mac上运行进程找到它?

3 个答案:

答案 0 :(得分:37)

lsof -d cwd将打印所有进程的当前工作目录。如果要显示您不拥有的进程的信息,则需要以root身份运行它(即使用sudo作为前缀)。如果您只想显示某些程序或进程的信息,请使用例如lsof -a -d cwd -c programnamelsof -a -d cwd -p processid(注意:在这两种情况下,-a标志表示其他标志的限制得到“和”编辑在一起)。 lsof非常复杂并且有更多选项,因此请阅读其手册页以获取更多信息。

答案 1 :(得分:6)

虽然Gordon Davisson's answer非常棒,但如果你想在不调用try { String hexString = "C2DE70A4"; float myFloat = Float.intBitsToFloat(Integer.parseInt(hexString, 16)); } catch (Exception e) { Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show(); } 的情况下从代码中执行此操作,那么这就是您需要的代码。它的灵感来自lsof源和this blog post

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;
}

答案 2 :(得分:0)

如果您正在谈论在Cocoa程序中执行此操作,这将起作用:

NSFileManager *fm = [[[NSFileManager alloc] init] autorelease];
NSString *currentPath = [fm currentDirectoryPath];