교육 목적으로 터미널에 연결된 실행중인 bash 프로세스의 strace 출력을보고 있습니다.
내 bash 프로세스에는 PID 2883이 있습니다.
나는 타이핑한다
[OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace
터미널로. 그런 다음 bash 프로세스로 이동하여 다음과 같은 상호 작용이 있습니다.
[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가 두 개의 쉘 프롬프트를 작성하려고하는 것 같습니다. 무슨 일이야?
cat
두 가지 차이점이 있습니다. 입력을 한 줄씩 읽고 입력을 다시 stdout으로 반향하는 동안 입력을 두 번 볼 수 있습니다 (입력하면 한 번, 고양이가 반향하면 한 번).