Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 有没有办法将shell连接到伪tty?_Linux_Pty - Fatal编程技术网

Linux 有没有办法将shell连接到伪tty?

Linux 有没有办法将shell连接到伪tty?,linux,pty,Linux,Pty,如果我有一个(编译的)后台进程(在GNU/Linux上),比如一个守护进程,使用openpty()或类似的方法为自己创建一个伪tty,那么有没有一种方法可以从shell连接到它,例如打开一个面向命令行的接口(例如,用于动态调试/重新配置它) 这与这里的问题非常相似: 有人建议在哪里使用屏幕和minicom连接到它,但我不太清楚如何连接。我假设screen只能连接到screen创建的屏幕 理想情况下,我希望使用标准命令行工具连接到守护进程 或者提供一个轻量级程序来执行必要的操作 其目的是实现比全

如果我有一个(编译的)后台进程(在GNU/Linux上),比如一个守护进程,使用openpty()或类似的方法为自己创建一个伪tty,那么有没有一种方法可以从shell连接到它,例如打开一个面向命令行的接口(例如,用于动态调试/重新配置它)

这与这里的问题非常相似:

有人建议在哪里使用屏幕和minicom连接到它,但我不太清楚如何连接。我假设screen只能连接到screen创建的屏幕

理想情况下,我希望使用标准命令行工具连接到守护进程 或者提供一个轻量级程序来执行必要的操作

其目的是实现比全面的客户机-服务器实现(以及使用TTY)更简单的功能

这是一个精简版本,它有点模糊

我最初的问题因缺乏明确的重点而被关闭。我这里有一个替代者:

这个问题集中在所描述用例的一个方面。 如果我有一个应用程序在它自己的pty中运行,是否有一种方法将该tty链接到现有的终端会话

实际上,应用程序是“后台的”,但运行在一个隐藏的终端中。您将如何使您的终端连接到那个“背景”终端

我想你需要这样的东西:

  • 选择循环,将stdin和stdout转发到pty的主端
  • 将SIGWINCH转发给pty,以调整其大小以匹配您的终端(反之亦然)

  • 这个问题假设您只有一个服务器进程,但实际上您需要两个

    一个过程是使用pty的从属端的“后台”应用程序

    另一个进程是管理pty主端的助手。 主端必须始终保持打开状态。当主文件描述符关闭时,pty对将被删除

    从机端的后台应用程序,读写到最后。 主机端决定如何处理这些读写操作

    要从另一个终端连接,您需要告诉主端将读写数据发送到哪里

    你可以给它一个你正在使用的pty终端的名字。然后,管理主端的进程可以根据需要转发读写操作

    这对于某些应用程序来说是不够的。特别是,如果终端的大小发生变化,应用程序应收到
    SIGWINCH
    。主人需要以某种方式把这个传给奴隶。终端功能也可能不同,需要翻译

    为了处理这些问题,客户端需要第三个进程,该进程与运行pty主端的进程通信。这就是
    screen
    tmux
    的工作方式

    所以没有一个标准的程序可以做你想做的事情,因为没有标准的方法来处理这个问题。像screen这样的程序有自己的方式,但在大多数情况下都可以按原样使用

    在to中,OP(该问题的)在原始模式下使用终端,这可能意味着这些复杂情况不适用。 例如,如果您只想从主机转发stdout,那么一个复制输出的pty名称就足够了

    另一方面,
    屏幕
    程序为每个虚拟屏幕(在pty的主机侧运行)创建一个套接字。当客户端进程连接到该套接字以与应用程序对话时,相同的
    屏幕
    可执行文件正在运行(以不同的模式)

    考虑到screen和tmux是专门为此而设计的,现在还不清楚您自己这样做会获得什么好处。 然而,这可能是一个有趣的学习练习

    这篇文章更好地描述了您的用例。 无法使用screen按需创建新的用户界面。
    只要您记得从一开始就在屏幕下运行进程,它就可以很好地处理前台和后台用例,其中屏幕附加和分离命令将取代直接使用
    bg
    fg
    这个问题假定您有一个单服务器进程,但实际上您需要两个

    一个过程是使用pty的从属端的“后台”应用程序

    另一个进程是管理pty主端的助手。 主端必须始终保持打开状态。当主文件描述符关闭时,pty对将被删除

    从机端的后台应用程序,读写到最后。 主机端决定如何处理这些读写操作

    要从另一个终端连接,您需要告诉主端将读写数据发送到哪里

    你可以给它一个你正在使用的pty终端的名字。然后,管理主端的进程可以根据需要转发读写操作

    这对于某些应用程序来说是不够的。特别是,如果终端的大小发生变化,应用程序应收到
    SIGWINCH
    。主人需要以某种方式把这个传给奴隶。终端功能也可能不同,需要翻译

    为了处理这些问题,客户端需要第三个进程,该进程与运行pty主端的进程通信。这就是
    screen
    tmux
    的工作方式

    所以没有一个标准的程序可以做你想做的事情,因为没有标准的方法来处理这个问题。像screen这样的程序有自己的方式,但在大多数情况下都可以按原样使用

    在to中,OP(该问题的)在原始模式下使用终端,这可能意味着这些复杂情况不适用。 例如,如果您只想从主机转发stdout,那么一个复制输出的pty名称就足够了

    另一方面,
    屏幕
    程序为每个虚拟屏幕(在pty的主机侧运行)创建一个套接字。山姆