天天看點

慢慢欣賞linux 指令行終端輸入輸出回顯之謎

linux嵌入裝置指令行界面,無論是通過序列槽還是telnet連結IP位址,都可以通過鍵盤鍵入Linux各種指令,各種指令會顯示在終端并可以執行。這是怎麼做到的呢。

先說telnet IP位址,登陸成功之後進入shell界面,檢視messages日志,發現提示打開新的pts裝置

然後 ls -l /proc/*/fd > test.txt 搜尋pts發現有如下搜尋結果

/proc/11614/fd

    0 -> /dev/pts/0

    1 -> /dev/pts/0

    2 -> /dev/pts/0

/proc/self/fd

    0 -> /dev/pts/0

    1 -> /dev/pts/0

    2 -> /dev/pts/0

再通過ps檢視11614正是目前的shell

ps | grep 11614

    11614 root 2536 S  -sh

self也是11614程序。

我們再看看telnet

在序列槽下敲tty回車顯示console

同上在test.txt 搜尋console發現有如下搜尋結果

/proc/1118/fd

    0 -> /dev/console

    1 -> /dev/console

    2 -> /dev/console

/proc/self/fd

    0 -> /dev/console

    1 -> /dev/console

    2 -> /dev/console

 通過ps檢視1118正是目前的shell

ps | grep 1118

    1118 root 2536 S  -/bin/sh

self在console下也就是1118程序。

綜上所述,無論通過telnet連結裝置的IP位址還是直接通過序列槽連結裝置,成功之後,生成新的程序也就是shell程序,該程序打開(tty_open)tty裝置/dev/pts/X (X代表數字)或者console裝置,然後堵塞讀(tty_read)該裝置。

在shell下輸入指令相當于tty裝置的讀也就是輸入操作,當序列槽有輸入,中斷最先感覺,儲存緩沖字元後喚醒讀程序,讀程序将字元通過線路規程解析後,傳給shell解析程式,shell回顯指令相當于tty裝置的輸出(tty_write)操作,寫操作之後執行shell指令并且将結果也輸出到tty裝置。

linux的程序檔案句柄查找

https://blog.csdn.net/shipinsky/article/details/78536831

繼續閱讀