У меня есть долго работающий bash
экземпляр (внутри screen
сеанса), который выполняет сложный набор команд внутри цикла (каждый цикл выполняет конвейеры, перенаправления и т. Д.).
Длинная командная строка была написана внутри терминала - она не внутри скрипта. Теперь я знаю идентификатор процесса bash, и у меня есть root-доступ - как я могу увидеть точную командную строку, выполняемую внутри этого bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
И в другом экземпляре оболочки я хочу видеть командную строку, выполняемую внутри 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'
Это возможно?
РЕДАКТИРОВАТЬ # 1
Добавление контрпримеров для некоторых ответов, которые я получил.
Об использовании
cmdline
under/proc/PID
: это не работает, по крайней мере, в моем сценарии. Вот простой пример:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
В другой оболочке:
$ cat /proc/8909/cmdline bash
Использование
ps -p PID --noheaders -o cmd
так же бесполезно:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
Также не полезно:$ 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
То есть нет выхода ОРИГИНАЛА командной строки, которая является то , что я ищу - то есть
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.