GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:come sapere dove è stato avviato un processo e come è stato avviato?

Soluzione 1:

Il modo più affidabile è guardare lo /proc dir per il processo. Ogni processo ha un /proc/<pid>/ directory in cui conserva informazioni come:

  1. cwd collegamento alla directory di lavoro corrente
  2. fd una directory con collegamenti ai file aperti (descrittori di file)
  3. cmdline leggilo per vedere quale riga di comando è stata utilizzata per avviare il processo
  4. environ le variabili di ambiente per quel processo
  5. root un collegamento a ciò che il processo considera la sua directory principale (sarà / a meno che non venga eseguito il chroot)

Ci sono più informazioni interessanti su ogni processo /proc, ma con quelle sopra sarai in grado di sapere esattamente cosa sta succedendo.

Inoltre, usando ps auxf ti mostrerà chi ha biforcato cosa in modo da farti un'idea migliore di chi sta chiamando il tuo perl.

Soluzione 2:

Nella maggior parte dei casi è sufficiente eseguire ps di solito è sufficiente, insieme ai tuoi flag preferiti per abilitare un output ampio. Mi propongo per ps -feww , ma gli altri suggerimenti qui funzioneranno. Nota che se un programma è stato avviato dal $PATH di qualcuno , vedrai solo il nome dell'eseguibile, non il percorso completo. Ad esempio, prova questo:

$ 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

È importante notare che le informazioni visibili in ps può essere completamente sovrascritto dal programma in esecuzione. Ad esempio, questo codice:

int main (int argc, char **argv) {
        memset(argv[0], ' ', strlen(argv[0]));
        strcpy(argv[0], "foobar");
        sleep(30);
        return(0);
}

Se lo compilo in un file chiamato "myprogram" e lo eseguo:

$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201

E poi esegui ps , vedrò un nome di processo diverso:

$ ps -f -p 10201
UID        PID  PPID  C STIME TTY          TIME CMD
lars     10201  9734  0 11:37 pts/10   00:00:00 foobar

Puoi anche guardare direttamente /proc/<pid>/exe , che può essere un collegamento simbolico all'eseguibile appropriato. Nell'esempio precedente, questo fornisce informazioni molto più utili rispetto a ps :

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

Soluzione 3:

per me, proprio ora, ho trovato quel pstree ha fornito un'indicazione molto più chiara di come è stato avviato un processo rispetto a ps aux

ha questo aspetto:

  ├─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} ]

Soluzione 4:

puoi usare:

systemctl status <PID>

o con il nome del processo:

systemctl status $(pgrep perl)

Questo fornirà informazioni sui servizi systemd che hanno avviato il tuo processo.

Ho trovato questo suggerimento qui

Soluzione 5:

Prova ps axww | grep perl per ottenere la riga di comando completa del processo. Sembra top ha appena tagliato una lunga fila.


Linux
  1. Come uccidere un processo zombie su Linux

  2. Come ho abbandonato il mio vecchio sistema operativo e sono passato a Linux

  3. Come hai iniziato con Linux?

  4. Come avviare il comando Linux in background e scollegare il processo nel terminale

  5. Come trovare e uccidere il processo Zombie in Linux

Come trovare e uccidere i processi in esecuzione in Linux

Come lavorare con il processo in primo piano e in background in Linux

Come KILL un processo su Linux

Come trovare il PID e il PPID di un processo in Linux

Come uccidere i processi in Linux usando kill, killall e pkill

Come tracciare e tracciare un processo Linux