1. 程式人生 > >慢慢欣賞linux 命令列終端輸入輸出回顯之謎

慢慢欣賞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