web-dev-qa-db-fra.com

Comment puis-je connaître le chemin absolu d'un processus en cours d'exécution?

Si j'ai plusieurs copies de la même application sur le disque et qu'une seule est en cours d'exécution, comme je peux le constater avec ps, comment puis-je connaître le chemin absolute pour le distinguer des autres?

91
Jader Dias
% Sudo ls -l /proc/PID/exe

par exemple:

% ps -auxwe | grep 24466 
 racine 24466 0,0 0,0 1476 280? S 2009 0:00 supervise sshd 
% Sudo ls -l /proc/24466/exe
lrwxrwxrwx 1 racine racine 0 février 1 18:05/proc/24466/exe ->/package/admin /daemontools-0.76/command/supervise
107
akira

Utilisation:

pwdx $pid

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

Habituellement, la commande which vous dira lequel est appelé à partir du shell:

#> which vlc
/usr/bin/vlc
16
seenu

Une façon est ps -ef

13
fpmurphy
6
Jader Dias

Pourquoi tout le monde s'attend-il à ce que vous connaissiez le PID? Voici le moyen humain-amical:

pwdx `pgrep ###process_name###`
2
moodboom

La réponse rapide consiste à utiliser ps avec des options ou les informations du 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 Unix FAQ pour un peu plus de détails, en particulier les questions 4.3 et 4.4.

2
mpez0

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

lsof -p PROCESS_ID

Ceci listera tous les fichiers ouverts par le processus, y compris l'emplacement réel de l'exécutable. Il est ensuite possible d’ajouter un peu plus de awk, cut, grep, etc. pour trouver les informations que vous recherchez.

A titre d'exemple, j'ai exécuté les commandes suivantes pour identifier l'origine de mon processus 'Java':

lsof -p 12345 | awk '{print $ NF}' | grep 'Java $'

0
ram

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.

0
jarno