Ho bash
un'istanza di lunga durata (all'interno di una screen
sessione) che esegue un insieme complesso di comandi all'interno di un ciclo (con ogni ciclo che esegue pipe, reindirizzamenti, ecc.).
La lunga riga di comando è stata scritta all'interno del terminale - non è contenuta in nessuno script. Ora conosco l'ID del processo bash e ho accesso root - come posso vedere l'esatta riga di comando eseguita all'interno di quello bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
E in un'altra istanza della shell, voglio vedere la riga di comando eseguita all'interno di 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'
È possibile?
EDIT # 1
Aggiunta di contro-esempi per alcune risposte che ho.
Informazioni sull'uso di
cmdline
under/proc/PID
: non funziona, almeno non nel mio scenario. Ecco un semplice esempio:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
In un'altra shell:
$ cat /proc/8909/cmdline bash
L'uso
ps -p PID --noheaders -o cmd
è altrettanto inutile:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
inoltre non è utile:$ 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
Cioè, non c'è alcun output della riga di comando ORIGINALE, che è quello che sto cercando - cioè il
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.