终端仿真器进程是服务器吗?

终端仿真器进程是服务器吗?

终端仿真器进程是服务器吗?

如果是,其客户是什么?我怎样才能找到它的客户?谢谢。

  1. netstat输出包含 lxterminal 进程。这是否意味着终端仿真器进程是基于unix域套接字的服务器?

    $ sudo netstat -ap | grep -i lxterminal
    [sudo] password for t: 
    unix  2      [ ACC ]     STREAM     LISTENING     28665    1480/lxterminal      /run/user/1000/.lxterminal-socket-:0
    unix  3      [ ]         STREAM     CONNECTED     28663    1480/lxterminal      
    unix  3      [ ]         STREAM     CONNECTED     28661    1480/lxterminal      
    unix  3      [ ]         STREAM     CONNECTED     28666    1480/lxterminal
    
  2. 服务器始终(或通常?)守护进程,因此它没有控制终端。 lxterminal 没有 ( ?):

    $ ps aux | grep -i lxterminal
    t         1480  0.1  0.3 473204 28232 ?        Sl   Nov21  22:39 lxterminal
    

答案1

AX 服务器之所以是服务器,是因为它为应用程序提供显示和输入设备。

应用程序例如lxterminal连接到 X 服务器来请求某些服务。例如:

  • 请画一个该形状和大小的窗户
  • 请告诉我用户按下和释放哪个键

它们通过 UNIX 域或 ABSTRACT 或 TCP 套接字连接到 X 服务器。

类似地,终端仿真器可以被视为终端应用程序的服务器。

有了echo test > /dev/pts/12echo应用程序可以被视为连接到终端模拟器(通过伪终端而不是网络套接字,尽管这里联系是通过 shell 重定向完成的,而不是echo) 并请求服务:请显示测试并将光标向下移动

现在,包括 gnome-terminal 和 lxterminal 在内的一些终端模拟器具有(令人讨厌的 IMO)功能,在第一次调用时,它们会启动一个守护进程来处理未来打开新终端窗口的请求。

稍后调用这些连接到该服务器(/run/user/1000/.lxterminal-socket-:0在您的情况下使用该 UNIX 域套接字)来请求新的终端窗口,大概是为了节省资源或以便可以在终端窗口之间共享某些信息。

当你这样做时:

cd /tmp && lxterminal -e vim

虽然已经有一个lxterminal正在运行,但第二次调用只是告诉服务器在新窗口中lxterminal运行,并将当前目录更改为.vim/tmp

请参阅xtermrxvt以更传统方式工作的终端仿真器。

实际上你也可以这样做:

printf '%s\0' /tmp lxterminal -e vim |
  socat -u - 'unix-connect:"/run/user/1000/.lxterminal-socket-:0"'

我觉得这很烦人,因为这意味着只有第一次调用才会继承调用者的环境(全局意义上的环境,包括umask, cwd, env vars...),以后的调用只能获得 cwd。

更多关于@JdeBP's Fine Answer的内容netstat 输出中的 lxterminal

相关内容