2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99

Comment puis-je connaître le cheminement absolu d'un processus en cours ?

Si j'ai plusieurs copies de la même application sur le disque, et qu'une seule fonctionne, comme je peux le voir avec ps, comment puis-je connaître le chemin absolu pour la distinguer des autres ?

Réponses (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

ex :

% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -\> /package/admin/daemontools-0.76/command/supervise
21
21
21
2013-05-03 06:48:17 +0000

Utilisation :

pwdx $pid

Cela vous donne le répertoire de travail actuel du pid, et non son chemin absolu.

Habituellement, la commande which vous indiquera lequel est invoqué depuis le shell :

#> which vlc
/usr/bin/vlc
14
14
14
2010-02-01 13:58:59 +0000

Un moyen est le ps -ef

4
4
4
2010-02-01 13:53:01 +0000
3
3
3
2017-10-09 15:49:14 +0000

lsof est une option. Vous pouvez essayer quelque chose comme ci-dessous :

lsof -p PROCESS_ID

Cela donnera la liste de tous les fichiers ouverts par le processus, y compris l'emplacement réel de l'exécutable. Il est alors possible d'ajouter quelques awk, cut, grep etc. pour trouver l'information que vous recherchez.

A titre d'exemple, j'ai exécuté les commandes suivantes pour identifier la provenance de mon processus “java” :

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$’.

2
2
2
2010-02-01 14:45:10 +0000

La réponse rapide est d'utiliser ps avec options ou l'info sur le système de fichiers /proc. Cela fonctionnera généralement, mais ce n'est pas garanti. En général, il n'y a pas de réponse définitive et garantie. Par exemple, que se passe-t-il si le fichier en cours d'exécution est supprimé pendant l'exécution, de sorte qu'il n'y a pas de chemin d'accès au fichier ?

Voir la FAQ Unix pour un peu plus de détails, en particulier les questions 4.3 et 4.4.

2
2
2
2016-04-27 23:28:20 +0000

Pourquoi tout le monde s'attend-il à ce que vous connaissiez le PID ? Voici la manière humaine :

pwdx `pgrep ###process_name###`
0
0
0
2016-03-05 11:35:41 +0000

Vous pourriez utiliser

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

ou

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

pour obtenir le chemin absolu. Le PID est le processus.