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 ls
commande, 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 which
commande vous dira lequel est appelé à partir du shell:
#> which vlc
/usr/bin/vlc
$pid
?" Le message édité ne répond toujours pas à la question. which
dit simplement "Si la commande est sur le chemin, alors qu'est-ce que c'est?"
pwdx
me 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 ps
avec les options ou les /proc
informations 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 $'
ls
commande.