Tengo una bashinstancia de larga ejecución (dentro de una screensesió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
cmdlineunder/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 ; doneEn otro caparazón:
$ cat /proc/8909/cmdline bashUsar
ps -p PID --noheaders -o cmdes igual de inútil:$ ps -p 8909 --no-headers -o cmd bashps -eaftampoco 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 8909Es 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.