Saya memiliki bashinstance berjalan lama (di dalam screensesi) 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
cmdlinebawah/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 ; doneDi shell lain:
$ cat /proc/8909/cmdline bashMenggunakan
ps -p PID --noheaders -o cmdsama tidak berguna:$ ps -p 8909 --no-headers -o cmd bashps -eafjuga 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 8909Artinya, tidak ada output dari baris perintah ORIGINAL, yang saya cari - yaitu
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done.