ptslinux
Ⅰ linux下進程名字前面帶[ ]的是什麼進程
虛擬終端,pts就是定義虛擬終端的進程。。
Ⅱ linux系統的tty,pts等終端概念
ttyS0~ ttyS3 (串列埠終端)指的是電腦的各個物理介面(這些都是串口,不是並口),外部的終端通過這些物理介面與電腦連接 ,從而實現和電腦進行交互。
例如:dmesg |grep tty可以查看開啟的介面(串口)
目前連接遠程伺服器或者直接在伺服器上面操作等都是通過創建虛擬終端的形式。比如pts/1 和tty1虛擬終端,其中tty表示直接登錄機器生成的而pts表示遠程連接生成的。其中遠程連接是通過sshd服務進行創建session會話和bash進程(所以可以看到有sshd進程,同時虛擬終端可以創建多個,這是依賴ptmx功能,sshd通過與ptmx通訊,ptmx在和相對應的pts通訊從而達到多個虛擬終端的效果)。
例如:在centos系統中的圖像界面中打開的terminal就是一個pts但是整個圖形界面是一個tty,centos切換到命令行界面後 輸入tty命令時輸出就是tty1或ttyn了,這時候的命令行界面與圖形界面的運行級別是一樣的,通過命令行創建的所有進程都是屬於tty1終端的。
注意: tty就是ttyS的虛擬版本,只是不需要通過外部線路進行連接了。遠程連接伺服器需要sshd服務,sshd和tty沒有聯系,遠程連接是因為本地有終端模擬器,本機連接就需要內核直接模擬一個模擬器了,所有遠程是pts,本機是tty 。
從上面的流程中可以看出來對用戶空間的程序來說它們沒有區別,都是一樣的;從內核角度來看pts的另一端連接的是ptmx,而tty的另一端連接的是內核的終端模擬器,ptmx和終端模擬器都只是負責維護會話和轉發數據包;再看看ptmx和內核終端模擬器的另一端,ptmx的另一端連接的是用戶空間的應用程序,如sshd、tmux等,而內核終端模擬器的另一端連接的是具體的硬體,如鍵盤和顯示器。
SSH遠程訪問---重點
這里的Terminal可能是任何地方的程序,比如windows上的putty,所以不討論客戶端的Terminal程序是怎麼和鍵盤、顯示器交互的。由於Terminal要和ssh伺服器打交道,所以肯定要實現ssh的客戶端功能。這里將建立連接和收發數據分兩條線路解釋,為了描述簡潔,這里以sshd代替ssh伺服器程序:
建立連接:
1.Terminal請求和sshd建立連接。
2.如果驗證通過,sshd將創建一個新的session。
3.調用API(posix_openpt())請求ptmx創建一個pts,創建成功後,sshd將得到和ptmx關聯的fd,並將該fd和session關聯起來。
4.同時sshd創建shell進程,將新創建的pts和shell綁定。
收發消息:
1.Terminal收到鍵盤的輸入,Terminal通過ssh協議將數據發往sshd。
2.sshd收到客戶端的數據後,根據它自己管理的session,找到該客戶端對應的關聯到ptmx上的fd。
3.往找到的fd上寫入客戶端發過來的數據。
4.ptmx收到數據後,根據fd找到對應的pts(該對應關系由ptmx自動維護),將數據包轉發給對應的pts。
5.pts收到數據包後,檢查綁定到自己上面的當前前端進程組,將數據包發給該進程組的leader。
6.由於pts上只有shell,所以shell的read函數就收到了該數據包。
7.shell對收到的數據包進行處理,然後輸出處理結果(也可能沒有輸出)。
8.shell通過write函數將結果寫入pts。
9.pts將結果轉發給ptmx。
10.ptmx根據pts找到對應的fd,往該fd寫入結果。
11.sshd收到該fd的結果後,找到對應的session,然後將結果發給對應的客戶端。
SSH + Screen/Tmux
常用Linux的同學應該對screen和tmux不陌生,通過它們啟動的進程,就算網路斷開了,也不會受到影響繼續執行,下次連上去時還能看到進程的所有輸出,還能繼續接著幹活。 這種情況要稍微復雜一點,不過原理都是一樣的,前半部分和普通ssh的方式是一樣的,只是pts/0關聯的前端進程不是shell了,而是變成了tmux客戶端,所以ssh客戶端發過來的數據包都會被tmux客戶端收到,然後由tmux客戶端轉發給tmux伺服器,而tmux伺服器乾的活和ssh的類似,也是維護一堆的session,為每個session創建一個pts,然後將tmux客戶端發過來的數據轉發給相應的pts。由於tmux伺服器只和tmux客戶端打交道,和sshd沒有關系,當終端和sshd的連接斷開時,雖然pts/0會被關閉,和它相關的shell和tmux客戶端也將被kill掉,但不會影響tmux伺服器,當下次再用tmux客戶端連上tmux伺服器時,看到的還是上次的內容。