Linux - Découvrez le répertoire de travail actuel d'un processus?

11

Si j'ai un processus PID X, comment savoir dans quel répertoire il s'exécutait? Je peux voir avec ps aux | grep Xla ligne de commande complète avec laquelle il a été invoqué. Cependant, dans ce cas, c'est le cas ./script.sh, et je veux voir lequel script.shfonctionne.

Rory
la source

Réponses:

11

Le problème /proc/PID/exeest que, pour les scripts shell, il indique l'emplacement du shell. Le problème avec /proc/PID/cwdest qu'il affiche le répertoire de travail actuel du processus. Si le processus change de répertoire, cela se reflète dans la cible de ce lien symbolique.

Cela montrera ce qu'était $ PWD au moment du démarrage du script (remplacez l'ID de processus qui vous intéresse par où vous voyez "PID"):

procdir=$(grep -az "\bPWD" /proc/PID/environ); echo $procdir

ou simplement:

grep -az "\bPWD" /proc/PID/environ

Cela montrera la commande qui l'a démarrée afin que vous puissiez voir si un répertoire relatif ou absolu a été utilisé:

proccmd=$(grep -az PROC_NAME /proc/PID/cmdline); echo $proccmd

ou simplement:

grep -az PROC_NAME /proc/PID/cmdline

Ensemble, ceux-ci devraient vous montrer quel script est en cours d'exécution. Car on a commencé avec ./tout ce dont vous avez besoin procdir.

En pause jusqu'à nouvel ordre.
la source
pwdx est mieux que cela.
Bjorn
8

Il y a une réponse plus simple, et c'est à utiliser pwdx, comme détaillé ici

Markus Jevring
la source
C'est la meilleure réponse.
Bjorn