Dans l'environnement Windows, il existe une API pour obtenir le chemin qui exécute un processus. Y a-t-il quelque chose de similaire sous Unix / Linux?
Ou y a-t-il une autre façon de faire cela dans ces environnements?
Sous Linux, le lien symbolique /proc/<pid>/exe
a le chemin de l'exécutable. Utilisez la commande readlink -f /proc/<pid>/exe
pour obtenir la valeur.
Sous AIX, ce fichier n'existe pas. Vous pouvez comparer cksum <actual path to binary>
et cksum /proc/<pid>/object/a.out
.
sudo
si la sortie est vide, certains processus sont créés par d'autres utilisateurs du système.Vous pouvez trouver facilement l'exe de ces manières, essayez-le vous-même.
ll /proc/<PID>/exe
pwdx <PID>
lsof -p <PID> | grep cwd
la source
pwdx <PID>
m'a donné l'emplacement du lien symbolique afin que je puisse trouver les journaux et arrêter le processus de manière appropriée.ll
est généralement un alias:alias ll='ls -alF'
.Un peu tard, mais toutes les réponses étaient spécifiques à Linux.
Si vous avez également besoin d'unix, vous en avez besoin:
MODIFIE: Correction du bug signalé par Mark lakata.
la source
"/proc/self/exe"
parsprintf(foo,"/proc/%d/exe",pid)
J'utilise:
Remplacez 786 par votre PID ou nom de processus.
la source
pwdx <process id>
Cette commande récupérera le chemin du processus à partir de l'endroit où elle s'exécute.
la source
Sous Linux, chaque processus a son propre dossier
/proc
. Vous pouvez donc utilisergetpid()
pour obtenir le pid du processus en cours, puis le joindre avec le chemin/proc
pour obtenir le dossier dont vous avez besoin, espérons-le.Voici un petit exemple en Python:
Voici également l'exemple en ANSI C:
Compilez-le avec:
la source
Il n'y a pas de méthode «garantie de fonctionner n'importe où».
L'étape 1 consiste à vérifier argv [0], si le programme a été démarré par son chemin complet, il aura (généralement) le chemin complet. S'il a été démarré par un chemin relatif, il en va de même (bien que cela nécessite d'obtenir le répertoire de travail actuel, en utilisant getcwd ().
L'étape 2, si rien de ce qui précède ne tient, consiste à obtenir le nom du programme, puis à obtenir le nom du programme à partir de argv [0], puis à récupérer le PATH de l'utilisateur à partir de l'environnement et à le parcourir pour voir s'il existe un exécutable binaire du même nom.
Notez que argv [0] est défini par le processus qui exécute le programme, il n'est donc pas fiable à 100%.
la source
merci: Kiwy
avec AIX:
la source
Vous pouvez également obtenir le chemin sur GNU / Linux avec (pas complètement testé):
Si vous voulez le répertoire de l'exécutable pour peut-être changer le répertoire de travail dans le répertoire du processus (pour media / data / etc), vous devez tout supprimer après le dernier /:
la source
La commande ci-dessous recherche le nom du processus dans la liste des processus en cours d'exécution et redirige la commande pid vers pwdx pour trouver l'emplacement du processus.
Remplacez "abc" par votre modèle spécifique.
Alternativement, si vous pouvez le configurer comme une fonction dans .bashrc, vous trouverez peut-être pratique à utiliser si vous en avez besoin pour être utilisé fréquemment.
Par exemple:
J'espère que cela aidera quelqu'un un jour .....
la source
Trouvez le chemin vers un nom de processus
la source
pgrep
); dans la ligne suivante, il obtient le chemin du binaire en cours d'exécution (/proc/$PID/exe
est un lien symbolique vers le fichier exécutable); et enfin il fait écho à ce lien symbolique.