Réponses:
Il y a 3 méthodes que je connais:
$ pwdx <PID>
$ lsof -p <PID> | grep cwd
$ readlink -e /proc/<PID>/cwd
Disons que nous avons ce processus.
$ pgrep nautilus
12136
Alors si on utilise pwdx
:
$ pwdx 12136
12136: /home/saml
Ou vous pouvez utiliser lsof
:
$ lsof -p 12136 | grep cwd
nautilus 12136 saml cwd DIR 253,2 32768 10354689 /home/saml
Ou vous pouvez fouiller directement dans le /proc
:
$ readlink -e /proc/12136/cwd/
/home/saml
/proc
.
pwdx
travaille pour moi.
pgrep <process-name>
Je suppose que vous avez l'ID de processus dans pid
. La plupart des méthodes sur la plupart des systèmes requièrent que le shell à partir duquel vous faites cela s'exécute sous le même utilisateur que le processus cible (ou racine).
Sous Linux et Solaris et peut-être d'autres unix System V:
cd /proc/$pid/cwd && pwd
Sous Linux (à l'exception des systèmes intégrés où readlink
n'est pas disponible) mais pas sous Solaris:
readlink /proc/$pid/cwd
Vous pouvez utiliser à peu près n'importe quelle variante unix lsof
. Attention, s'il existe une nouvelle ligne, elle sera imprimée sous la forme \n
(indiscernable de la barre oblique inverse suivie de n
). Si vous vous sentez chanceux, vous pouvez utiliser le deuxième formulaire, qui étouffe silencieusement tous les espaces du nom du répertoire.
lsof -a -Fn -p $pid -d cwd | sed -e '1d' -e '2s/^n/'
lsof -p $pid | awk '$4=="cwd" {print $9}'
Bonus: si vous devez faire en sorte qu'un processus modifie son répertoire actuel, vous pouvez le faire avec un débogueur. Ceci est utile par exemple pour déplacer un programme de longue durée qui ne se soucie pas de son répertoire actuel du répertoire que vous souhaitez supprimer. Tous les programmes n'apprécient pas d'avoir leur répertoire actuel changé sous leurs pieds - par exemple, un shell risque de planter.
#!/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
autres Unix?
pwdx
est présent sur Solaris depuis le 20e siècle, Linux depuis le milieu des années 2000 (imitant Solaris, dit la page de manuel). Non présent sur aucun autre unix autant que je sache.
pwdx
il?
Basé @Gilles répondre ..
Si vous connaissez le PID de votre processus. Pour Mac OSX et Linux :
lsof -p PID | awk '$4=="cwd" {print $9}'
pour obtenir le travail du processus ..