Os diretórios de trabalho dos processos são conhecidos por outros processos em muitos sistemas operacionais. Eles são consultáveis a partir do kernel nos BSDs e no Linux, usando sysctl()
e procfs
, respectivamente. No entanto, nem o comando ps
do Linux do procps nem os comandos ps
nos BSDs obtêm e reportam essa informação.
Para obter o diretório atual de um processo nos BSDs, o comando é fstat
, que informa o sistema de arquivos e o número do nó i.
% fstat -p $$|awk '{ if ("wd" == $4 || 1 == NR) print; }' USER CMD PID FD MOUNT INUM MODE SZ|DV R/W JdeBP zsh 71512 wd /usr/home/JdeBP 4 drwxr-xr-x 127 r %
Observe que, é claro, os diretórios de trabalho podem ser acessados por vários nomes e esses nomes podem variar conforme as coisas são renomeadas e os links são criados / destruídos. A parte estável deles é o objeto de arquivo, o vnode, não as entradas de diretório para alcançá-lo.
Portanto, o mecanismo do Linux, que informa um nome em /proc/pid/cwd
, não é necessariamente confiável.
Finalmente: note que o diretório atual de um processo não é necessariamente o diretório de trabalho que ele tinha quando o processo foi gerado, que é todo aquele shells de controle de trabalho na verdade sabe.