GNU/Linux >> Tutoriels Linux >  >> Linux

Linux :Comment savoir où un processus a été démarré et comment il a été démarré ?

Solution 1 :

Le moyen le plus fiable est de regarder le /proc dir pour le processus. Chaque processus a un /proc/<pid>/ répertoire où il conserve des informations telles que :

  1. cwd lien vers le répertoire de travail courant
  2. fd un répertoire avec des liens vers les fichiers ouverts (descripteurs de fichiers)
  3. cmdline lisez-le pour voir quelle ligne de commande a été utilisée pour démarrer le processus
  4. environ les variables d'environnement pour ce processus
  5. root un lien vers ce que le processus considère comme étant le répertoire racine (il sera / à moins d'être chrooté)

Il y a plus d'informations intéressantes sur chaque processus /proc, mais avec celles ci-dessus, vous pourrez savoir exactement ce qui se passe.

Aussi, en utilisant ps auxf vous montrera qui a forké quoi afin que vous puissiez avoir une meilleure idée de qui appelle votre perl.

Solution 2 :

Dans la plupart des cas, il suffit d'exécuter ps est généralement suffisant, ainsi que vos drapeaux préférés pour permettre une sortie large. Je penche pour ps -feww , mais les autres suggestions ici fonctionneront. Notez que si un programme a été démarré à partir du $PATH de quelqu'un , 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 peut être complètement écrasé 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é "myprogram" et que je 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 consulter directement /proc/<pid>/exe , qui peut être un lien symbolique vers l'exécutable approprié. Dans l'exemple ci-dessus, cela vous donne beaucoup plus d'informations utiles que ps :

$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb  8 11:31 /proc/9600/exe -> /usr/bin/lftp

Solution 3 :

pour moi, tout à l'heure, j'ai trouvé que pstree a donné une indication beaucoup plus claire de la façon dont un processus a été lancé, que ps aux

ça ressemble à ça :

  ├─lightdm─┬─Xorg
  │         ├─lightdm─┬─init─┬─apache2───2*[apache2───26*[{apache2}]]
  │         │         │      ├─at-spi-bus-laun─┬─dbus-daemon
  │         │         │      │                 └─3*[{at-spi-bus-laun}]
  │         │         │      ├─at-spi2-registr───{at-spi2-registr}
  │         │         │      ├─dbus-daemon
  │         │         │      ├─dropbox───29*[{dropbox} ]

Solution 4 :

vous pouvez utiliser :

systemctl status <PID>

ou avec le nom du processus :

systemctl status $(pgrep perl)

Cela fournira des informations sur les services systemd qui ont démarré votre processus.

J'ai trouvé cet indice ici

Solution 5 :

Essayez ps axww | grep perl pour obtenir la ligne de commande complète de votre processus. Il ressemble à top vient de couper une longue ligne.


Linux
  1. Comment tuer un processus zombie sous Linux

  2. Comment j'ai abandonné mon ancien système d'exploitation et sauté dans Linux

  3. Comment avez-vous commencé avec Linux ?

  4. Comment démarrer la commande Linux en arrière-plan et détacher le processus dans le terminal

  5. Comment trouver et tuer le processus Zombie sous Linux

Comment trouver et tuer les processus en cours d'exécution sous Linux

Comment travailler avec le processus de premier plan et d'arrière-plan sous Linux

Comment tuer un processus sous Linux

Comment trouver le PID et le PPID d'un processus sous Linux

Comment tuer les processus sous Linux en utilisant kill, killall et pkill

Comment suivre et tracer un processus Linux