Question 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 voir avec ps, comment puis-je connaître le absolu chemin pour le distinguer des autres?


79
2018-02-01 13:48


origine




Réponses:


% sudo ls -l /proc/PID/exe

par exemple:

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

90
2018-02-01 17:04



Dans mon système (Ubuntu 14.04), vous n'avez pas besoin d'être superutilisateur pour exécuter le programme. ls commander. - jarno
@jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied - il ne s'agit pas d'exécuter le ls commande, il s'agit d'accéder aux informations de processus d'un processus ne vous appartenant pas. Dans ma boîte, environ 97% de tous les processus répertoriés dans / proc sont des processus racine et les autres sont répartis sur 11 utilisateurs différents. - Irfy


Utilisation:

pwdx $pid

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

Généralement le which commande vous dira qui est appelé depuis le shell:

#> which vlc
/usr/bin/vlc

13
2018-05-03 06:48



cette réponse a besoin de plus d'upvote .. - Kokizzu
@Kokizzu Non, ce n'est pas parce que cela ne répond pas du tout à la question. La seule commande qui vous indique quel binaire sera exécuté si vous exécutez la commande maintenant. La question était "quel binaire est déjà en cours d'exécution". Imaginez par exemple avoir une dizaine de jdks sur votre ordinateur. Si vous voulez savoir pour un processus en cours d'exécution depuis lequel jdk a été utilisé, cela ne vous aide pas. Il vous dira seulement de quel jdk il sera extrait, si vous l'exécutez maintenant. La réponse acceptée est également la bonne. - noamik
Une manière évidente que cette réponse est fausse: sur ma machine, je lance des processus avec différentes versions de JDK et quelques 32 bits / 64 bits. Si je veux identifier la version correcte de jstack / jmap pour le processus, la réponse ci-dessus ne fonctionnera pas tant que la réponse acceptée le sera. - Daniel Da Cunha
@Kokizzu Cela ne répond qu'à la question "Quel est le répertoire de travail actuel du processus? $pid? "La publication éditée ne répond toujours pas à la question. which dit simplement "Si la commande est sur le chemin, alors qu'est-ce que c'est?" - John Strood


Un moyen est ps -ef


11
2018-02-01 13:58



n'a pas fonctionné pour un service spécifique, il suffit de fournir le chemin relatif - Jader Dias
M'a aidé à identifier un processus via la commande avec laquelle il a été démarré. - jpierson


ps auxwwwe

La source:

https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output


5
2018-02-01 13:53



ne montre pas tous les chemins qualifiés complets sur mon Linux: "root 24466 0.0 0.0 1476 280? S 2009 0:00 supervise sshd" par exemple - akira
C'est plus précis que les autres réponses ... peut-être pas aussi utile, mais plus la bonne réponse. Voté - John Hunt


La réponse rapide est d'utiliser ps avec des options ou le /proc Informations sur le système de fichiers. Ça va d'habitude travail, mais n'est pas garanti. En général, il n'y a pas de réponse définie et garantie. Par exemple, que se passe-t-il si le fichier en cours d'exécution est supprimé lors de l'exécution, afin qu'il n'y ait 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
2018-02-01 14:45





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

pwdx `pgrep ###process_name###`

2
2018-04-27 23:28



La question dit "comme je peux le voir avec ps", Donc il affichera probablement le PID - Scz
Ah ok vrai. Je trouve toujours cela plus rapide dans un grand nombre de mes cas d'utilisation. - moodboom


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. PID est le processus.


0
2018-03-05 11:35





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

lsof -p PROCESS_ID

Cela listera 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. supplémentaires 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
2017-10-09 15:49



En quoi est-ce différent des réponses déjà affichées? - Pimp Juice IT