Recientemente me encontré en una posición similar. Tenía un script de shell que no era identificable a través de otros medios (como argumentos, etc.)
Hay maneras de averiguar mucho más acerca de un proceso en ejecución de lo que cabría esperar.
Usa lsof -p $pid
para ver qué archivos están abiertos, lo que puede darte algunas pistas. Tenga en cuenta que algunos archivos, aunque son "eliminados", aún pueden mantenerse abiertos por el script. Siempre que la secuencia de comandos no cierre el archivo, aún puede leer y escribir desde allí, y el archivo aún ocupa espacio en el sistema de archivos.
Use strace
para rastrear activamente las llamadas al sistema utilizadas por el script. El script leerá el archivo de script para que pueda ver algunos de los comandos a medida que se leen antes de la ejecución. Busque read
comandos con este comando:
strace -p $pid -s 1024
Esto hace que las cadenas de comandos de impresión de hasta 1024 caracteres (normalmente, el comando strace
sería truncar cadenas mucho más cortos que eso).
Examine el directorio /proc/$pid
para ver detalles sobre el script; en particular, vea /proc/$pid/environ
que le dará el entorno de proceso separado por nulos. Para leer este "archivo" correctamente, utilice este comando:
xargs -0 -i{} < /proc/$pid/environ
Puede canalizar esto en less
o guardarlo en un archivo. También existe el /proc/$pid/cmdline
, pero es posible que solo le proporcione el nombre del shell (-bash
, por ejemplo).
verdadera. ¡Y tu ejemplo con pidof es bueno! Pero sugiero la opción -x ya que estoy hablando de scripts de shell, y más información de ps: ps efl --ppid $ (pidof -x yourscript) – nealmcb
Estaba a punto de sugerir algo similar; ahora sé sobre la opción '--ppid'. Gracias. –