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 ps, comment puis-je connaître le chemin absolu pour la distinguer des autres?
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 ps, comment puis-je connaître le chemin absolu pour la distinguer des autres?
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 supervise sshd % sudo ls -l / proc / 24466 / exe lrwxrwxrwx 1 racine racine 0 février 1 18h05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise
ls: cannot read symbolic link /proc/28783/exe: Permission denied- il ne s'agit pas d'exécuter la lscommande, mais d'accéder aux informations de processus d'un processus qui ne vous appartient pas. Sur ma machine, environ 97% de tous les processus répertoriés dans / proc sont des processus racine, les autres étant répartis sur 11 utilisateurs différents.
Utilisation:
pwdx $pid
Cela vous donne le répertoire de travail actuel du pid, pas son chemin absolu.
Habituellement, la whichcommande vous dira lequel est appelé à partir du shell:
#> which vlc
/usr/bin/vlc
$pid?" Le message édité ne répond toujours pas à la question. whichdit simplement "Si la commande est sur le chemin, alors qu'est-ce que c'est?"
pwdxme renvoie le chemin absolu du programme exécutable du processus dépendant de pid sur redhat x64 6.3.
Une façon est ps -ef
ps auxwwwe
La source:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
La réponse rapide est d'utiliser psavec les options ou les /procinformations du système de fichiers. Cela fonctionnera généralement , mais 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 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.
Pourquoi tout le monde s'attend-il à ce que vous connaissiez le PID? Voici le moyen humain-amical:
pwdx `pgrep ###process_name###`
ps», elle affichera donc probablement le PID
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 $'
lscommande.