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

猜你喜欢

转载自blog.csdn.net/shipinsky/article/details/83021047