Saya memiliki bash
instance berjalan lama (di dalam screen
sesi) yang mengeksekusi serangkaian perintah yang kompleks di dalam loop (dengan setiap loop melakukan pipa, pengalihan, dll).
Baris perintah panjang ditulis di dalam terminal - tidak ada di dalam skrip apa pun. Sekarang, saya tahu ID proses bash, dan saya memiliki akses root - bagaimana saya bisa melihat baris perintah yang tepat dieksekusi di dalamnya bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
Dan dalam contoh shell lain, saya ingin melihat baris perintah dieksekusi di dalam 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'
Apakah ini mungkin?
EDIT # 1
Menambahkan contoh balasan untuk beberapa jawaban yang saya dapatkan.
Tentang menggunakan di
cmdline
bawah/proc/PID
: itu tidak berhasil, setidaknya tidak dalam skenario saya. Berikut ini contoh sederhana:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
Di shell lain:
$ cat /proc/8909/cmdline bash
Menggunakan
ps -p PID --noheaders -o cmd
sama tidak berguna:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
juga tidak membantu:$ 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
Artinya, tidak ada output dari baris perintah ORIGINAL, yang saya cari - yaitu
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.