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:
cwdcollegamento alla directory di lavoro correntefduna directory con collegamenti ai file aperti (descrittori di file)cmdlineleggilo per vedere quale riga di comando è stata utilizzata per avviare il processoenvironle variabili di ambiente per quel processorootun 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.