Dans la plupart des cas, une simple exécution ps
est généralement suffisante, ainsi que vos indicateurs préférés pour permettre une sortie large. Je me penche vers ps -feww
, mais les autres suggestions ici fonctionneront. Notez que si un programme a été démarré à partir de quelqu'un $PATH
, vous ne verrez que le nom de l'exécutable, pas le chemin complet. Par exemple, essayez ceci:
$ lftp &
$ ps -feww | grep ftp
lars 9600 9504 0 11:30 pts/10 00:00:00 lftp
lars 9620 9504 0 11:31 pts/10 00:00:00 grep ftp
Il est important de noter que les informations visibles dans ps
peuvent être complètement écrasées par le programme en cours d'exécution. Par exemple, ce code:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
Si je compile ceci dans un fichier appelé "monprogramme" et l'exécute:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
Et puis exécutez ps
, je verrai un nom de processus différent:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
Vous pouvez également regarder directement /proc/<pid>/exe
, qui peut être un lien symbolique vers l'exécutable approprié. Dans l'exemple ci-dessus, cela vous donne des informations beaucoup plus utiles que ps
:
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
/proc
fourniront toutes les informations sur un programme,exe
seront un lien vers l'exécutable,cwd
vers le répertoire de travail en cours, lefd
répertoire contient des liens vers des fichiers ouverts (y compris l'entrée, la sortie standard et l'erreur standard)