Solución 1:
La forma más confiable es mirar el /proc dir para el proceso. Cada proceso tiene un /proc/<pid>/ directorio donde guarda información como:
cwdenlace al directorio de trabajo actualfdun directorio con enlaces a los archivos abiertos (descriptores de archivos)cmdlineléelo para ver qué línea de comando se usó para iniciar el procesoenvironlas variables de entorno para ese procesorootun enlace a lo que el proceso considera que es el directorio raíz (será/a menos que se haga chroot)
Hay más información interesante sobre cada proceso/proc, pero con los anteriores podrá saber exactamente qué está pasando.
Además, usando ps auxf le mostrará quién bifurcó qué para que pueda tener una mejor idea de quién está llamando a su perl.
Solución 2:
En la mayoría de los casos, simplemente ejecuta ps suele ser suficiente, junto con sus banderas favoritas para habilitar una salida amplia. Me inclino por ps -feww , pero las otras sugerencias aquí funcionarán. Tenga en cuenta que si un programa se inició desde el $PATH de alguien , solo verá el nombre del ejecutable, no la ruta completa. Por ejemplo, prueba esto:
$ 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
Es importante tener en cuenta que la información visible en ps puede ser completamente sobrescrito por el programa en ejecución. Por ejemplo, este código:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
Si compilo esto en un archivo llamado "myprogram" y lo ejecuto:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
Y luego ejecuta ps , veré un nombre de proceso diferente:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
También puedes mirar directamente a /proc/<pid>/exe , que puede ser un enlace simbólico al ejecutable apropiado. En el ejemplo anterior, esto le brinda mucha más información útil que ps :
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
Solución 3:
para mí, justo ahora, encontré que pstree dio una indicación mucho más clara de cómo se inició un proceso, que ps aux
se ve así:
├─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} ]
Solución 4:
puedes usar:
systemctl status <PID>
o con el nombre del proceso:
systemctl status $(pgrep perl)
Esto proporcionará información sobre los servicios de systemd que iniciaron su proceso.
Encontré esta pista aquí
Solución 5:
Prueba ps axww | grep perl para obtener la línea de comando completa de su proceso. Parece top acaba de recortar una línea larga.