Tengo una bash
instancia de larga ejecución (dentro de una screen
sesión) que está ejecutando un conjunto complejo de comandos dentro de un bucle (con cada bucle haciendo canalizaciones, redireccionamientos, etc.).
La larga línea de comando se escribió dentro del terminal; no está dentro de ningún script. Ahora, conozco el ID del proceso bash y tengo acceso a la raíz: ¿cómo puedo ver la línea de comando exacta que se ejecuta dentro de eso bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
Y en otra instancia de shell, quiero ver la línea de comando ejecutada dentro del PID 1234:
bash$ echo $$
5678
bash$ su -
sh# cd /proc/1234
sh# # Do something here that will display the string \
'while true ; do someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done'
es posible?
EDITAR # 1
Agregar contraejemplos para algunas respuestas que tengo.
Sobre el uso de
cmdline
under/proc/PID
: eso no funciona, al menos no en mi escenario. Aquí hay un ejemplo simple:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
En otro caparazón:
$ cat /proc/8909/cmdline bash
Usar
ps -p PID --noheaders -o cmd
es igual de inútil:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
tampoco es útil:$ ps -eaf | grep 8909 ttsiod 8909 8905 0 10:09 pts/0 00:00:00 bash ttsiod 30697 8909 0 10:22 pts/0 00:00:00 sleep 30 ttsiod 31292 13928 0 10:23 pts/12 00:00:00 grep --color=auto 8909
Es decir, no hay salida de la línea de comando ORIGINAL, que es lo que estoy buscando, es decir, el
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.