मेरे पास एक लंबे समय तक चलने वाला bash
उदाहरण है (एक screen
सत्र के अंदर ) जो लूप के अंदर कमांड के एक जटिल सेट को निष्पादित कर रहा है (प्रत्येक लूप के साथ पाइप, रीडायरेक्ट आदि)।
लंबी कमांड लाइन टर्मिनल के अंदर लिखी गई थी - यह किसी भी स्क्रिप्ट के अंदर नहीं है। अब, मुझे bash प्रक्रिया आईडी पता है, और मेरे पास रूट एक्सेस है - मैं सटीक कमांड लाइन को उसके अंदर निष्पादित कैसे देख सकता हूं bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
और एक और शेल उदाहरण में, मैं पीआईडी 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'
क्या यह संभव है?
EDIT # 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
यानी, ORIGINAL कमांड लाइन का कोई आउटपुट नहीं है, जो कि मैं खोज रहा हूं - यानी
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
।