ฉันมีbash
อินสแตนซ์ที่ใช้เวลานาน(ภายในscreen
เซสชัน) ที่กำลังดำเนินการชุดคำสั่งที่ซับซ้อนภายในลูป
บรรทัดคำสั่งยาวเขียนอยู่ในเทอร์มินัล - มันไม่ได้อยู่ในสคริปต์ใด ๆ ตอนนี้ฉันรู้รหัสกระบวนการทุบตีและฉันมีการเข้าถึงรูท - ฉันจะดูบรรทัดคำสั่งที่ถูกดำเนินการภายในได้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
ใต้/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
คือ