una programa oculta mac explorador crear como comandos comando carpeta buscar basicos archivos macos osx-snow-leopard

macos - programa - Directorio de trabajo del proceso en ejecución en Mac OS



explorador de archivos mac (3)

Quiero saber el directorio de trabajo de un proceso en Mac OS (10.6). Intenté encontrar la variable de entorno PWD en la salida del comando ps, pero la variable PWD no está disponible allí. ¿Hay una mejor manera de encontrar esto para un proceso en ejecución en mac?


Aunque la respuesta de Gordon Davisson es excelente, si desea hacerlo desde un código sin llamar a lsof , aquí está el código que necesita. Está inspirado en la fuente de lsof y esta publicación de blog .

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

Este código de ejemplo producirá una salida como esta:

proc 44586 executable: /bin/zsh proc 44586 cwd: /private/tmp


Si estás hablando de hacerlo dentro de un programa Cocoa, esto funcionará:

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


lsof -d cwd imprimirá los directorios de trabajo actuales para todos sus procesos. Si desea mostrar información sobre procesos que no posee, debe ejecutarla como root (es decir, usar sudo como prefijo). Si desea mostrar la información solo para ciertos programas o procesos, utilice, por ejemplo, lsof -a -d cwd -c programname o lsof -a -d cwd -p processid (nota: en ambos casos, el indicador -a significa que la otra las restricciones de las banderas se "y" se editan juntas). lsof es bastante complejo y tiene muchas más opciones, así que lea su página de manual para obtener más información.