Respuestas:
Hay 3 métodos que conozco:
$ pwdx <PID>
$ lsof -p <PID> | grep cwd
$ readlink -e /proc/<PID>/cwd
Digamos que tenemos este proceso.
$ pgrep nautilus
12136
Entonces si usamos pwdx
:
$ pwdx 12136
12136: /home/saml
O puedes usar lsof
:
$ lsof -p 12136 | grep cwd
nautilus 12136 saml cwd DIR 253,2 32768 10354689 /home/saml
O puedes meter directamente en /proc
:
$ readlink -e /proc/12136/cwd/
/home/saml
/proc
.
pwdx
funciona para mi.
pgrep <process-name>
Supongo que tiene la identificación del proceso pid
. La mayoría de los métodos en la mayoría de los sistemas requerirán que el shell desde el que está haciendo esto se ejecute como el mismo usuario que el proceso de destino (o raíz).
En Linux y Solaris y quizás en algunos otros sistemas System V:
cd /proc/$pid/cwd && pwd
En Linux (excepto los sistemas integrados donde readlink
no está disponible) pero no en Solaris:
readlink /proc/$pid/cwd
En casi cualquier variante de Unix, puede usar lsof
. Tenga en cuenta que si hay una nueva línea, se imprimirá como \n
(indistinguible de la barra invertida seguida de n
). Si se siente afortunado, puede usar la segunda forma, que silencia silenciosamente todos los espacios en blanco en el nombre del directorio.
lsof -a -Fn -p $pid -d cwd | sed -e '1d' -e '2s/^n/'
lsof -p $pid | awk '$4=="cwd" {print $9}'
Bonificación: si necesita hacer que un proceso cambie su directorio actual, puede hacerlo con un depurador. Esto es útil, por ejemplo, para mover un programa de larga ejecución que no le importa su directorio actual fuera del directorio que desea eliminar. No todos los programas aprecian que su directorio actual cambie bajo sus pies; por ejemplo, es probable que un shell se bloquee.
#!/bin/sh
# Use gdb to change the working directory of a process from outside.
# This could be generalized to a lot of other things.
if [ $# -ne 2 ]; then
echo 1>&2 "Usage: $0 PID DIR"
exit 120
fi
case "$1" in
*[!0-9]*) echo 1>&2 "Invalid pid \`$1'"; exit 3;;
esac
case "$2" in
*[\\\"]*)
echo 1>&2 "Unsupported character in directory name, sorry."
exit 3;;
esac
gdb -n -pid "$1" -batch -x /dev/stdin <<EOF
call chdir("$2")
detach
quit
EOF
pwdx
otros Unixes?
pwdx
está presente en Solaris desde el siglo XX, Linux desde mediados de la década de 2000 (imitando Solaris, dice la página del manual). No está presente en ningún otro unix AFAIK.
pwdx
hay?
Basado @Gilles respuesta ..
si conoce el PID de su proceso ... para Mac OSX y Linux use:
lsof -p PID | awk '$4=="cwd" {print $9}'
para obtener el directorio de trabajo del proceso ...