ฉันกำลังดูผลลัพธ์ strace ของกระบวนการทุบตีทำงานที่เชื่อมต่อกับเทอร์มินัลเพื่อการศึกษา
กระบวนการทุบตีของฉันมี 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
...
ฉันสับสนในสองบรรทัดสุดท้าย ดูเหมือนว่า bash พยายามที่จะเขียน shell prompt สองตัว? เกิดอะไรขึ้นที่นี่?
cat
มีสองความแตกต่าง: มันอ่านบรรทัดทีละบรรทัดและในขณะที่มันสะท้อนอินพุตของมันกลับไปที่ stdout ฉันเห็นอินพุตสองครั้ง (เมื่อฉันพิมพ์และเมื่อแมว echoes มัน)