मैं शैक्षिक उद्देश्यों के लिए, टर्मिनल से जुड़ी चल रही बैश प्रक्रिया के स्ट्रेस आउटपुट को देख रहा हूं।
मेरी बैश प्रक्रिया में PID 2883 है।
मैं अंकित करता हुँ
[OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace
एक टर्मिनल में। मैं तब अपनी बैश प्रक्रिया में जाता हूं, और निम्नलिखित बातचीत होती है:
[OP@localhost ~]$ ls
आउटपुट को देखते हुए, मैं देखता हूं
strace: Process 2883 attached
read(0, "l", 1) = 1
write(2, "l", 1) = 1
read(0, "s", 1) = 1
write(2, "s", 1) = 1
read(0, "\r", 1) = 1
write(2, "\n", 1) = 1
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fec6b1d8e50) = 3917
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3917, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
write(1, "\33]0;OP@localhost:~\7", 23) = 23
write(2, "[OP@localhost ~]$ ", 22) = 22
...
मैं आखिरी दो लाइनों में उलझन में हूं। ऐसा प्रतीत होता है कि बैश दो शेल प्रॉम्प्ट लिखने का प्रयास कर रहे हैं? यहाँ क्या चल रहा है?
cat
, तो दो अंतर होते हैं: यह इनपुट लाइन को लाइन से पढ़ता है, और जब यह अपने इनपुट को वापस करने के लिए प्रतिध्वनित करता है, तो मैं इनपुट को दो बार देखता हूं (एक बार जब मैं टाइप करता हूं, और एक बार जब बिल्ली इसे खोदती है)।