Eu tenho uma bashinstância de execução longa (dentro de uma screensessão) que está executando um conjunto complexo de comandos dentro de um loop (com cada loop executando pipes, redirecionamentos etc.).
A longa linha de comando foi escrita dentro do terminal - não está em nenhum script. Agora, eu sei o ID do processo bash e tenho acesso root - como posso ver a linha de comando exata sendo executada dentro dele bash?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
E em outra instância do shell, quero ver a linha de comando executada dentro do 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'
Isso é possível?
EDIT # 1
Adicionando contra-exemplos para algumas respostas que tenho.
Sobre o uso do
cmdlineunder/proc/PID: isso não funciona, pelo menos não no meu cenário. Aqui está um exemplo simples:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; doneEm outra concha:
$ cat /proc/8909/cmdline bashUsar
ps -p PID --noheaders -o cmdé tão inútil:$ ps -p 8909 --no-headers -o cmd bashps -eaftambém não é ú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 8909Ou seja, não há saída da linha de comando ORIGINAL, que é o que estou procurando - ou seja, o
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done.