У мене є тривалий bash
екземпляр (всередині screen
сеансу), який виконує складний набір команд всередині циклу (кожен цикл виконує труби, переадресації тощо).
Довгий командний рядок був написаний всередині терміналу - це не всередині жодного сценарію. Тепер я знаю ідентифікатор процесу bash, і у мене є доступ до кореня - як я можу побачити точний командний рядок, який виконується всередині цього 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
Тобто, немає виводу з командного рядка ORIGINAL, який я шукаю - тобто
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.