CN106325982A - shell处理方法及装置 - Google Patents
shell处理方法及装置 Download PDFInfo
- Publication number
- CN106325982A CN106325982A CN201510349477.5A CN201510349477A CN106325982A CN 106325982 A CN106325982 A CN 106325982A CN 201510349477 A CN201510349477 A CN 201510349477A CN 106325982 A CN106325982 A CN 106325982A
- Authority
- CN
- China
- Prior art keywords
- shell
- server
- telnet
- selection signal
- display
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了shell处理方法及装置,其中,shell处理方法包括:接收第一显示请求信息;根据该第一显示请求信息显示shell列表,其中,shell列表中包括两个以上shell;接收选择信号,其中,该选择信号用于从shell列表中选择预定shell;根据该选择信号执行切换到预定shell的处理。可以将多个shell以列表的形式显示,根据用户的需求在多个shell之间进行切换,解决了相关技术中存在的多个shell之间进行切换时,复杂度高,切换效率低,从而导致的用户体验度降低的问题,进而降低了多个shell之间进行切换时的复杂度,提高切换效率,进而提高了用户的体验度。
Description
技术领域
本发明涉及通信领域,具体而言,涉及shell处理方法及装置。
背景技术
shell是指“提供使用者使用界面”的软件(命令解析器),它接收用户命令,然后调用相应的应用程序以满足用户的需求。shell管理用户与***之间的交互,可以简单的描述为:shell等待用户输入,向***解释用户的输入,并且处理各种各样的***输出结果。为了兼顾客户的需求以及开发调试维护的需要,完整的***一般会设计多个shell,它们一般分为供产品用户使用的操作维护管理(Operation Administration andMaintenance,简称为OAM)shell和供开发调试人员使用的调试诊断shell。
一般地,产品用户只面对OAM shell,产品用户通过OAM shell的各种命令和参数有效地自定义自己的产品,他们不关心内部的实现机制,而调试诊断shell对他们来说是不可见的,也不允许操作。但在产品的开发环节和后期维护过程中,调试诊断shell发挥着巨大作用,依靠调试诊断shell的内部调试命令和方法,可以快速地消除故障,有效减少开发故障带来的成本消耗,因此如何在***中部署这两种shell,如何实现同一用户界面下两种shell的友好显示和快捷切换,成为产品开发和调试的难题。
在相关技术中,***部署的shell通常只有两个,一个OAM shell和一个调试诊断shell,两个shell之间切换也是通过快捷键切换,但是切换并没有提示,也没有列表,而如果想要部署其他调试诊断shell,只能通过远程登录telnet服务器来实现,操作起来很复杂。另外如果远程客户想要telnet使用shell的话,因为一个网络端口只能对应一个shell,如果远程客户想要登录到其他shell的话,相应开放的端口也必须增多,这不利于整个***的安全性,而且,telnet必须一个窗口登录一个shell,其shell登录复杂度高,多个shell之间的切换更不容易实现。
并且,一般一台中大型通信设备上存在着多块子设备,例如宽带接入***中光线路终端(Optical Line Terminal,简称为OLT)设备的主用主控板、备用主控板和网络处理器板,为了***的安全性着想,***只能提供一个对外操作界面和通信接口,即主用主控板的shell和端口,如果要登入备用主控板或网络处理器板的shell的话,必须要从主用主控板板上进行telnet登陆,这更是加大了整个***的shell的复杂性,假如还是按照相关技术中的shell部署方式的话,会造成开发调试人员操作体验度下降,调试诊断难度增大,开发维护时间加长,继而造成整个流程成本提升。
由此可知,为了复杂的调试需求,***中可能存在一个或多个OAM shell以及多个调试诊断shell,相关技术中并不能够很好的满足产品用户在一个或多个OAM shell和多个调试诊断shell之间切换的需求。针对相关技术中存在的在多个shell之间进行切换时,复杂度高,切换效率低,从而导致的用户体验度降低的问题,目前尚未提出有效的解决方案。
发明内容
本发明提供了shell处理方法及装置,以至少解决相关技术中相关技术中存在的多个shell之间进行切换时,复杂度高,切换效率低,从而导致的用户体验度降低的问题。
根据本发明的一个方面,提供了一种shell处理方法,包括:接收第一显示请求信息;根据所述第一显示请求信息显示shell列表,其中,所述shell列表中包括两个以上shell;接收选择信号,其中,所述选择信号用于从所述shell列表中选择预定shell;根据所述选择信号执行切换到所述预定shell的处理。
可选地,接收所述第一显示请求信息包括:接收本地用户输入的所述第一显示请求信息和/或,接收远程登录Telnet服务器转发的所述第一显示请求信息;和/或,接收所述选择信号包括:接收本地用户输入的所述选择信号和/或,接收远程登录Telnet服务器转发的所述选择信号。
可选地,在根据所述选择信号执行切换到所述预定shell的处理之后,还包括:接收本地用户输入的操作信号,和/或,接收远程登录Telnet服务器转发的操作信号,其中,所述操作信号用于对所述预定shell进行操作;将所述操作信号转发到所述预定shell上;接收所述预定shell根据所述操作信号进行处理后返回的处理结果;显示所述处理结果,和/或,将所述处理结果发送给所述Telnet服务器。
根据本发明的另一个方面,还提供了一种shell处理方法,包括:接收第二显示请求信息,其中,所述第二显示请求信息用于请求显示shell列表,所述shell列表中包括两个以上shell;将所述第二显示请求信息转发给shell服务器;接收所述shell服务器返回的所述shell列表;接收选择信号,其中,所述选择信号用于从所述shell列表中选择用于所述shell服务器执行切换处理的预定shell;将所述选择信号转发给所述shell服务器。
可选地,在将所述选择信号转发给所述shell服务器之后,还包括:接收用户输入的用于对所述预定shell进行操作的操作信号;将所述操作信号转发给所述shell服务器,其中,所述操作信号被所述shell服务器转发到所述预定shell上;接收所述shell服务器发送的处理结果,其中,所述处理结果为所述预定shell根据所述操作信号进行处理后返回的处理结果;显示所述处理结果。
根据本发明的又一个方面,还提供了一种shell处理装置,包括:第一接收模块,用于接收第一显示请求信息;第一显示模块,用于根据所述第一显示请求信息显示shell列表,其中,所述shell列表中包括两个以上shell;第二接收模块,用于接收选择信号,其中,所述选择信号用于从所述shell列表中选择预定shell;切换模块,用于根据所述选择信号执行切换到所述预定shell的处理。
可选地,第一接收模块包括:接收用本地户输入的所述第一显示请求信息和/或,接收远程登录Telnet服务器转发的所述第一显示请求信息;和/或,第二接收模块包括:接收本地用户输入的所述选择信号和/或,接收远程登录Telnet服务器转发的所述选择信号。
可选地,所述装置还包括:第三接收模块,用于接收本地用户输入的操作信号,和/或,接收远程登录Telnet服务器转发的操作信号,其中,所述操作信号用于对所述预定shell进行操作;第一转发模块,用于将所述操作信号转发到所述预定shell上;第四接收模块,用于接收所述预定shell根据所述操作信号进行处理后返回的处理结果;第二显示模块,用于显示所述处理结果,和/或,将所述处理结果发送给所述Telnet服务器。
根据本发明的再一个方面,提供了一种shell处理装置,包括:第五接收模块,用于接收第二显示请求信息,其中,所述第二显示请求信息用于请求显示shell列表,所述shell列表中包括两个以上shell;第二转发模块,用于将所述第二显示请求信息转发给shell服务器;第六接收模块,用于接收所述shell服务器返回的所述shell列表;第七接收模块,用于接收选择信号,其中,所述选择信号用于从所述shell列表中选择用于所述shell服务器执行切换处理的预定shell;第三转发模块,用于将所述选择信号转发给所述shell服务器。
可选地,所述装置还包括:第八接收模块,用于接收用户输入的用于对所述预定shell进行操作的操作信号;第四转发模块,用于将所述操作信号转发给所述shell服务器,其中,所述操作信号被所述shell服务器转发到所述预定shell上;第九接收模块,用于接收所述shell服务器发送的处理结果,其中,所述处理结果为所述预定shell根据所述操作信号进行处理后返回的处理结果;第三显示模块,用于显示所述处理结果。
通过本发明,采用接收第一显示请求信息,根据该第一显示请求信息显示shell列表,其中,shell列表中包括两个以上shell,并接收选择信号,其中,该选择信号用于从shell列表中选择预定shell,再根据该选择信号执行切换到预定shell的处理的方式,可以将多个shell以列表的形式显示,根据用户的需求在多个shell之间进行切换,解决了相关技术中存在的多个shell之间进行切换时,复杂度高,切换效率低,从而导致的用户体验度降低的问题,进而降低了多个shell之间进行切换时的复杂度,提高切换效率,进而提高了用户的体验度。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的第一种shell处理方法的流程图;
图2是根据本发明实施例的第一种shell处理方法的优选流程图;
图3是根据本发明实施例的第二种shell处理方法的流程图;
图4是根据本发明实施例的第二种shell处理方法的优选流程图;
图5是根据本发明实施例的第一种shell处理装置的结构框图;
图6是根据本发明实施例的第一种shell处理装置的优选结构框图;
图7是根据本发明实施例的第二种shell处理装置的结构框图;
图8是根据本发明实施例的第二种shell处理装置的优选结构框图;
图9是根据本发明实施例的shell服务器端和客户端的总体框架图;
图10是根据本发明实施例的shell服务器端和客户端的交互流程图;
图11是根据本发明实施例的shell的注册登记信息结构图;
图12是根据本发明实施例的shell框架中主从伪终端设备的操作过程图;
图13是根据本发明实施例的串口守护线程的运行流程图;
图14是根据本发明实施例的shell列表信息示意图;
图15是根据本发明实施例的远程登录telnet到shell的流程图;
图16是根据本发明实施例的shell客户端的操作流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
在本实施例中提供了一种shell处理方法,图1是根据本发明实施例的第一种shell处理方法的流程图,如图1所示,该流程包括如下步骤:
步骤S102,接收第一显示请求信息;
步骤S104,根据该第一显示请求信息显示shell列表,其中,shell列表中包括两个以上shell;
步骤S106,接收选择信号,其中,该选择信号用于从shell列表中选择预定shell;
步骤S108,根据该选择信号执行切换到上述预定shell的处理。
通过上述步骤,从而可以将多个shell以列表的形式显示出来,根据用户的需求在多个shell之间进行切换,解决了相关技术中存在的多个shell之间进行切换时,复杂度高,切换效率低,从而导致的用户体验度降低的问题,进而降低了多个shell之间进行切换时的复杂度,提高切换效率,进而提高了用户的体验度,这里,多个shell可以包括一个或多个OAM shell以及多个调试诊断shell。
在一个可选的实施例中,步骤S102中接收第一显示请求信息可以包括:接收本地用户输入的第一显示请求信息和/或,接收远程登录Telnet服务器转发的第一显示请求信息。步骤S106中的接收选择信号可以包括:接收本地用户输入的选择信号和/或,接收远程登录Telnet服务器转发的选择信号。在该可选的实施例中,可以接收直接来自于本地用户输入的显示指令,也可以接收来自远程登录Telnet服务器转发的用户指令,从而既可以实现本地控制多个shell之间的切换,又可以实现远程控制多个shell之间的切换,方便用户进行本地和远程的开发及调试。
图2是根据本发明实施例的第一种shell处理方法的优选流程图,如图2所示,在该可选的实施例中,上述shell处理方法除了包括图1中所示的步骤S102至步骤S108之外,还包括:
步骤S202,接收本地用户输入的操作信号,和/或,接收远程登录Telnet服务器转发的操作信号,其中,该操作信号用于对预定shell进行操作;
步骤S204,将该操作信号转发到上述预定shell上;
步骤S206,接收上述预定shell根据操作信号进行处理后返回的处理结果;
步骤S208,显示该处理结果,和/或,将该处理结果发送给Telnet服务器。
其中,上述步骤S202至S208可以在步骤S108之后执行,通过上述步骤S202至步骤S208,可以使得用户对切换后的shell进行操作,方便用户的操作维护和开发调试,并且在用户需要对其他shell进行操作时,可以再通过步骤S102至步骤S108进行shell的切换。
上述的shell处理方法可以是从shell服务器侧进行的描述。
图3是根据本发明实施例的第二种shell处理方法的流程图,如图3所示,该方法包括如下步骤:
步骤S302,接收第二显示请求信息,其中,该第二显示请求信息用于请求显示shell列表,该shell列表中包括两个以上shell;
步骤S304,将该第二显示请求信息转发给shell服务器;
步骤S306,接收上述shell服务器返回的shell列表;
步骤S308,接收选择信号,其中,该选择信号用于从shell列表中选择用于shell服务器执行切换处理的预定shell;
步骤S310,将选择信号转发给shell服务器。
上述操作可以在远程登录Telnet服务器上执行,通过上述步骤,通过shell服务器返回的包含多个shell的shell列表,从而可以远程获得多个可切换的shell,根据远程用户的需求在多个shell之间进行切换,解决了相关技术中存在的多个shell之间进行切换时,复杂度高,切换效率低,从而导致的用户体验度降低的问题,进而降低了多个shell之间进行切换时的复杂度,提高切换效率,进而提高了用户的体验度,这里,多个shell可以包括一个或多个OAM shell以及多个调试诊断shell。
图4是根据本发明实施例的第二种shell处理方法的优选流程图,除了包括图3所示的步骤S302至步骤S310外,还包括以下步骤:
步骤S402,接收用户输入的用于对预定shell进行操作的操作信号;
步骤S404,将该操作信号转发给shell服务器,其中,该操作信号被shell服务器转发到预定shell上;
步骤S406,接收shell服务器发送的处理结果,其中,该处理结果为预定shell根据上述操作信号进行处理后返回的处理结果;
步骤S408,显示该处理结果。
其中,上述步骤S402至S408可以在步骤S310之后执行,通过上述步骤S402至步骤S408,可以使得远程登录用户对切换后的shell进行操作,方便远程登录用户的操作维护或开发调试,并且在远程登录用户需要对其他shell进行操作时,可以再通过步骤S302至步骤S310进行shell的切换。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了shell处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图5是根据本发明实施例的第一种shell处理装置的结构框图,如图5所示,该装置包括第一接收模块52、第一显示模块54、第二接收模块56和切换模块58,下面对该装置进行说明。
第一接收模块52,用于接收第一显示请求信息;第一显示模块54,连接至上述第一接收模块52,用于根据该第一显示请求信息显示shell列表,其中,shell列表中包括两个以上shell;第二接收模块56,连接至上述第一显示模块54,用于接收选择信号,其中,该选择信号用于从上述shell列表中选择预定shell;切换模块58,连接至上述第二接收模块56,用于根据该选择信号执行切换到预定shell的处理。
在另一个可选的实施例中,第一接收模块52可以包括:接收本地用户输入的第一显示请求信息和/或,接收远程登录Telnet服务器转发的第一显示请求信息;和/或,第二接收模块56可以包括:接收本地用户输入的选择信号和/或,接收远程登录Telnet服务器转发的选择信号。
图6是根据本发明实施例的第一种shell处理装置的优选结构框图,如图6所示,该装置除了包括图5所示的全部模块外,还包括第三接收模块62、第一转发模块64、第四接收模块66和第二显示模块68,下面对该装置进行说明。
第三接收模块62,连接至上述切换模块58,用于接收本地用户输入的操作信号,和/或,接收远程登录Telnet服务器转发的操作信号,其中,该操作信号用于对预定shell进行操作;第一转发模块64,连接至上述第三接收模块62,用于将该操作信号转发到预定shell上;第四接收模块66,连接至上述第一转发模块64,用于接收上述预定shell根据操作信号进行处理后返回的处理结果;第二显示模块68,连接至上述第四接收模块66,用于显示该处理结果,和/或,将该处理结果发送给Telnet服务器。
上述的shell处理装置可以是应用于shell服务器侧。
图7是根据本发明实施例的第二种shell处理装置的结构框图,如图7所示,该装置包括:第五接收模块72、第二转发模块74、第六接收模块76、第七接收模块78和第三转发模块710,下面对该装置进行说明。
第五接收模块72,用于接收第二显示请求信息,其中,该第二显示请求信息用于请求显示shell列表,该shell列表中包括两个以上shell;第二转发模块74,连接至上述第五接收模块72,用于将该第二显示请求信息转发给shell服务器;第六接收模块76,连接至上述第二转发模块74,用于接收shell服务器返回的shell列表;第七接收模块78,连接至上述第六接收模块76,用于接收选择信号,其中,该选择信号用于从shell列表中选择用于shell服务器执行切换处理的预定shell的处理;第三转发模块710,连接至上述第七接收模块78,用于将该选择信号转发给shell服务器。
图8是根据本发明实施例的第二种shell处理装置的优选结构框图,如图8所示,该装置除了包括图7所示的所有模块外,还包括第八接收模块82、第四转发模块84、第九接收模块86及第三显示模块88,下面对该装置进行说明。
第八接收模块82,连接至上述第三转发模块710,用于接收用户输入的用于对预定shell进行操作的操作信号;第四转发模块84,连接至上述第八接收模块82,用于将该操作信号转发给shell服务器,其中,该操作信号被shell服务器转发到预定shell上;第九接收模块86,连接至上述第四转发模块84,用于接收shell服务器发送的处理结果,其中,该处理结果为上述预定shell根据操作信号进行处理后返回的处理结果;第三显示模块88,连接至上述第九接收模块86,用于显示该处理结果。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。
下面结合具体的应用场景,对本发明进行举例说明。
在本实施例中,目的是提供一种同一终端会话上多个shell合一和切换的方法,具体地,同一终端会话分为串口终端会话和telnet终端会话。采用本发明实施例所示的方法,可以实现各个shell彼此之间不相互干扰,功能保持独立,但shell之间能进行快速切换的效果。
总的来说,本实施例中采用以下技术方案:shell服务器端进程创建套接字socket并绑定到本地环回地址127.0.0.1上,该socket作为shell客户端(也即可以进行切换的各个shell自身)与服务器端的交互控制通道,各个shell客户端的切换显示和一系列控制操作依赖着与服务器端的socket的通信。
包括以下步骤:
(a)shell服务器端进程创建socket并绑定到本地环回地址127.0.0.1上,并创建服务器端socket处理线程,socket处理线程侦听并接收shell客户端的连接,根据shell客户端发过来的消息,判断消息中的匹配特征分别提供shell注册流程、shell取消注册流程、显示shell列表流程、切换shell流程、Telnet shell登陆流程、Telnet退出流程和Telnet密码检测流程等;
(b)shell服务器端进程创建串口守护线程,接管/dev/console,串口守护线程侦听所有shell客户端的输入,即所有shell客户端的用户输入均被shell服务器端的串口守护线程捕获;
(c)shell服务器端串口守护线程检测用户切换shell快捷键输入,如果检测到是切换shell的快捷键,则立即进行shell显示列表和切换shell流程;
(d)shell服务器端串口守护线程检测用户非切换shell的快捷键输入,将当前输入转发到当前shell上,***将命令进行解析处理后,结果在/dev/console串口上进行回显,表现为在当前shell上进行输出;
(e)shell服务器端创建Telnet处理线程,提供Telnet到shell的服务;
(f)各个shell客户端,无论是产品用户使用的OAM shell和只有开发调试人员使用的调试诊断shell,都通过连接服务器端创建的本地socket,从而向服务器端进程发送shell注册请求,shell服务器端接收到注册请求,为各个shell客户端分配主从伪终端设备/dev/pty和/dev/tty,进而分配主从伪终端设备的文件描述符fd;
(g)各个shell客户端通过读(read)、写(write)命令读写shell服务器端为它们分配的伪终端从设备的fd,从而进行输入输出处理和回显。
下面对于步骤(a)至步骤(g)进行说明。
步骤(a)中shell服务器端进程必须在***启动的早期创建,并且至晚得在各个shell客户端启动之前启动,socket处理线程循环接受shell客户端的连接,通过read调用读取连接在本地环回地址127.0.0.1上新创建的客户套接字的描述符,获得shell客户端发送来的shell登记数据结构,根据该数据结构的cmd成员的值,socket处理线程可分别提供shell的各种操作。
步骤(b)中串口守护线程打开/dev/console设备,返回文件描述符fd,串口守护线程对该文件描述符fd进行read调用,读取用户输入的字符。
步骤(c)和步骤(d)中串口守护线程对于用户输入字符进行检测。一般用户输入字符在属性上分为两种,一种是普通字符,还有另外一种是shell切换的控制字符。对于这两种输入字符,串口守护线程会做不同的处理:当检测到是切换shell的快捷键字符时,串口守护线程会输出shell列表,让用户进行选择要进入的shell序号,然后进行shell切换,即,改变串口守护线程的/dev/console读取字符的转发方向。例如,shell A切换到shell B,是串口守护线程将/dev/console读取出来的字符本来转发到shell A的伪终端主设备文件描述符fdA,现在则转发到shell B的伪终端主设备文件描述符fdB上。当检测到非切换shell的快捷键字符时,串口守护线程直接转发输入到当前shell客户端上,并且将当前shell客户端的输出转发回显到串口终端/dev/console上。其他shell的后台打印也可根据开发人员选择输出到串口终端/dev/console上,这样可以自定义设置当前shell是否有其他shell的输出。
步骤(e)中可实现远程telnet到各个shell,通常的,各个shell的telnet并非独立,telnet下的shell用户界面需要与串口下保持一致,即能够实现远程telnet下的shell合一切换和控制。为此,shell服务器端创建Telnetd守护线程,在指定端口实现shell的远程telnet,即在Telnetd守护线程中创建telnet服务器端socket并绑定到指定端口上,telnet客户端进行连接,此时为telnet用户分配并打开伪终端主从设备,并将串口守护线程的读取fd从串口终端/dev/console的fd改为Telnetd守护线程为telnet客户分配的伪终端从设备fd,最后创建telnet输入和输出任务供telnet端的读写操作。
步骤(f)和步骤(g)中各shell客户端在启动时通过连接到shell服务器端的本地socket,并发送注册消息给服务器端,shell服务器端根据各个shell的注册消息的发送顺序给各个shell依次分配主从伪终端设备,shell客户端获得伪终端从设备的fd。因为服务器端对主设备的读写会反映到从设备上,所以shell客户端的总输入线程通过read调用读取从设备fd,就能获得服务器端接管的串口输入数据,然后进行解析处理,最后返回结果打印在当前shell终端(串口或者telnet)上。
总的来说,shell服务器端和shell客户端为shell切换和控制的两大主体,shell服务器端只有一个,而shell客户端由***中的shell数量决定,一个具体的shell即是一个shell客户,这是典型的一对多的结构。
本发明实施例的实现依靠着这两个主体模块的通信和消息发送,其中步骤(a)到步骤(d)用以实现shell服务器端的流程,而步骤(f)到步骤(g)完成shell客户端的操作。shell服务器端管理控制着各个shell,接管着所有shell的输入输出,并将输入转发到当前shell上,各个shell客户端从服务器端获得输入后进入自己的输入解析输出流程,最后将输出再转发到shell服务器端,由服务器端决定输出到串口终端还是telnet会话终端。这种C/S设计大大降低了shell部署的复杂度,***中可以布局多个shell,shell服务器端用序号和伪终端等数据组成的节点结构区分各个shell,各个shell之间相互透明,它们并不知道***其他shell的存在,而shell的切换由服务器端进行交互控制,这也大大的减少了shell之间信息的干扰和具体shell的设计复杂度。
步骤(e)则增强了shell使用的场合,前方发生故障时不必亲临现场,只需远程到故障环境收集信息加以分析。
综上所述,本发明实施例可以非常简便地部署***中的各个shell,并且shell之间切换简单,远程调试功能还能减少开发调试人员的调试成本。使得***的开发调试变得十分方便。
图9是根据本发明实施例的shell服务器端和客户端的总体框架图,如图9所示,该框架图中包括一个shell服务器端和3个shell客户端A、B、C,通过图9所示的输入与输出方向,shell服务器端用来处理shell的控制切换以及字符输入输出的转发,shell客户端则读取shell服务器端转发到本shell伪终端上的字符,并通过自己的shell解析函数进行处理。最后进入自己的函数或者命令流程,输出结果到本shell的伪终端上,shell服务器端判断当前活动终端,如果是串口,则会把字符进一步写到/dev/console串口设备上,如果是telnet会话终端,则写到***为telnet会话分配的伪终端上。
基于图9所示的shell服务器端和客户端的总体框架图,图10是根据本发明实施例的shell服务器端和客户端的交互流程图,在本实施例的shell服务器端和客户端构成的***中,shell服务器端和客户端是典型的C/S的一对多的结构,shell服务器端和客户端有一套自己的交互过程,如图10所示,该流程包括:
步骤S1002,shell服务器端通过socket函数创建服务器(server)端socket,绑定到本地环回地址上,等待shell客户端的连接,shell客户端启动后,立即向shell服务器端发送注册请求。
图11是根据本发明实施例的shell的注册登记信息结构图,如图11所示,登记表信息包含shell注册线程的端口号(pid),shell控制选项(Shoptions),shell客户端向shell服务器端或者shell服务器端向shell客户端的具体命令请求号(cmd),shell名(sh_name)和服务器端为shell分配的伪终端从设备名(pty_name)。其中,为了方便shell的自定义设置,可以利用shell控制选项来对shell进行其他功能的管理,例如是否需要在当前shell上显示其他shell的输出等等。而命令请求号则是一组枚举变量,例如REGSH、ASSIGNFD、RETRY、SHLIST、SWSH。shell服务器端和客户端都可判断对方发来的不同命令请求从而执行不同的操作,实现整个shell控制流程。在图10所示的步骤1)中,shell客户端发送注册请求,只要将命令请求号置为注册命令号REGSH即可。
步骤S1004,shell服务器端侧检测到shell客户端发来的登记信息结构中的命令号是注册命令时,立即跳入到注册shell的函数中,并为shell客户端分配打开伪终端设备,置cmd命令号为ASSIGNFD,然后发消息给shell客户端,shell客户端收到消息后,检测到cmd命令号是ASSIGNFD后,则打开shell登记表信息结构中的伪终端从设备名,返回fd。
步骤S1006,读取shell下输入的字符,转发到shell伪终端主设备上。
步骤S1008,shell客户端取伪终端从设备fd上字符,然后解析处理,返回结果,将结果写在fd所指向的伪终端上。
在步骤S1004至步骤S1008中,***中shell的输入输出离不开伪终端的操作,图12是根据本发明实施例的shell框架中主从伪终端设备的操作过程图,如图12所示,pty伪终端(Pseudo Terminal)是成对的逻辑终端设备(即主(master)设备和从(slave)设备,对master的操作会反映到slave上),例如/dev/ptyy1和/dev/ttyy1,它们就是一组伪终端设备。其中/dev/ptyy1是主设备,而/dev/ttyy1则是对应的从设备。如果一个程序把ptyy1(master设备)看作是一个串行端口设备,则它对该端口的读/写操作会反映在该逻辑终端设备对应的另一个ttyy1(slave设备)上面。而ttyy1则是另一个程序用于读写操作的逻辑设备。这样,两个程序就可以通过这种逻辑设备进行互相交流,并且使用ttyy1的程序则认为自己正在与一个串行端口进行通信,shell服务器端和shell客户端就是基于这样的原理来进行shell的输入输出和切换控制的,shell服务器端将用户输入的字符写到伪终端主设备上,这样shell客户端读取伪终端从设备就能读到这个字符,当shell客户端输出字符时,则把字符写到伪终端从设备上,对应的字符也会写入到主设备上。
shell服务器端的核心操作在串口守护线程上,图13是根据本发明实施例的串口守护线程的运行流程图,如图13所示,该流程包括:
步骤S1302,串口守护线程打开控制台终端设备/dev/console,返回文件描述符fd_tty_console,然后设置串口终端属性,让串口切换的特殊快捷键能够正常被捕获;
步骤S1304,创建console到current_fd_to_console方向数据通道的守护线程,即console_daemon线程,console_daemon线程主要完成字符的捕获读取以及切换密码的判断;
步骤S1306,在console_daemon线程里,首先会通过read函数读取fd_console文件描述符,该描述符在串口为活动终端时设置为fd_tty_console,而当telnet会话为活动终端时,设置为telnet会话打开的伪终端从设备返回的文件描述符,这样无论是串口下的字符,还是telnet会话中的输入都能被正常读取到;
步骤S1308,console_daemon线程开始进行shell切换密码的判断与解析;
步骤S1310,当检测到是切换密码或者快捷键时,此时输出当前***活动的已注册的shell列表,图14是根据本发明实施例的shell列表信息示意图,如图14所示,其包含shell版本号(shell_version),各个shell的索引号(index)、伪终端名(ptys)和shell名(name);
步骤S1312,呼出shell列表菜单后,此时要求用户输入目标shell的索引号;
步骤S1314,用户输入索引号后,判断用户输入的索引号的shell序号,根据序号获得shell节点链表中具体的shell节点信息;
步骤S1316,console_daemon线程找到目标shell的伪终端主设备,将current_fd_to_console赋值为目标shell的伪终端主设备的文件描述符,然后将用户输入信息写在current_fd_to_console指向的伪终端上,即当前伪终端上,执行切换操作;
步骤S1318,如果检测到是普通字符的话,则直接将输入信息写在当前伪终端上;
步骤S1320,除了console_daemon线程以外,串口守护线程还会将已注册的所有shell的fd加入到set集中,然后等待各shell上的事件发生,如果是当前shell上有输出需要打印,则串口守护线程会将其回显到fd_console所指向的终端上(串口或者telnet终端),如果不是当前shell,则根据shell控制选项Shoptions是否将本shell的打印显示到其他shell上;
步骤S1322,串口守护线程里还会对shell异常进行处理,当有shell节点发生异常时,例如shell注册进程异常关闭,串口线程会将当前shell节点删除;
步骤S1324,串口守护线程还对其他shell节点字符读取和输出进行控制。
此外,除了本地shell服务器端对于多个shell进行切换等控制外,图15是根据本发明实施例的远程登录telnet到shell的流程图,如图15所示,该流程图包括Telnet守护线程、Telnet输入线程和Telnet输出线程,下面对各个线程进行具体说明。
Telnetd守护线程包括步骤S1502至步骤S1512,具体为:
步骤S1502,shell服务器端初始化时会创建Telnet服务器端socket绑定到指定端口并接受telnet会话连接,即新建telnetd守护线程,该线程用来接收并处理远程telnet的连接;
步骤S1504,当检测到有远程会话连接时,为安全起见,远程用户需要输入密码登入,并对用户密码进行判断;
步骤S1506,当用户输入正确密码后,守护线程会进行会话控制,即判断当前是否有其他的远程会话正在连接,如果当前有活动的远程会话,则不允许新的远程会话登入;
步骤S1508,当会话被允许登入后,telnetd守护线程为会话分配主从伪终端设备;
步骤S1510,将console_daemon线程中的读fd_console设置为telnet会话的伪终端从设备的fd,从而console_daemon线程由原来读取串口的输入变为读取telnet会话的输入;
步骤S1512,为保证telnet会话的输入和输出控制,telnetd守护线程还创建了telnet输入线程(tTelnetInTask)和输出线程(tTelnetOutTask)。
Telnet输入线程包括步骤S1514至步骤S1518,具体为:
步骤S1514,将telnet会话的socket fd加入到set集中并调用select函数等待输入;
步骤S1516,读取并处理远程telnet会话输入;
步骤S1518,当检测到telnet会话5分钟不活动时,即5分钟没有检测到输入,这时telnet输入任务会关闭掉telnet会话的socket和打开的伪终端,然后退出。
Telnet输出线程包括步骤S1520至步骤S1522,具体为:
步骤S1520,从telnet的伪终端主从设备fd读取输入字符(buf);
步骤S1522,将telnet用户输入的字符显示到当前telnet会话上。
图13和图15是对于shell服务器端的流程说明,图16是根据本发明实施例的shell客户端的操作流程图,如图16所示,该流程包括:
步骤S1602,shell客户端在初始化时向shell服务器端发送注册请求;
步骤S1604,等待shell服务器端的分配文件描述符(assign file descriptor,简称为assign_fd)的应答;
步骤S1606,shell服务器端收到注册请求后,给shell分配打开伪终端,打开后返回文件描述符,并发送分配文件描述符命令给shell客户端;
步骤S1608,shell客户端接收到该命令,开始将该文件描述符重定向到标准输入和输出;
步骤S1610,shell客户端的总输入线程读取该文件描述符上的字符,然后由shell自己的解析函数进行解析;
步骤S1612,shell将字符组成的命令的执行结果写在该文件描述符指向的伪终端上。
综上所述,应用本发明实施例,可轻松布局***中的各个shell,各个shell在同一终端上显示,显示互不干扰,shell切换也简单,而且能够实现远程telnet到***的各个shell,以上都大大减少了***故障的debug时间,提高了开发测试人员的效率。
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S1,接收第一显示请求信息;
S2,根据该第一显示请求信息显示shell列表,其中,shell列表中包括两个以上shell;
S3,接收选择信号,其中,该选择信号用于从shell列表中选择预定shell;
S4,根据该选择信号执行切换到上述预定shell的处理。
在本实施例中,上述存储介质还可以被设置为存储用于执行以下步骤的程序代码:
S1,接收第二显示请求信息,其中,该第二显示请求信息用于请求显示shell列表,该shell列表中包括两个以上shell;
S2,将该第二显示请求信息转发给shell服务器;
S3,接收上述shell服务器返回的shell列表;
S4,接收选择信号,其中,该选择信号用于从shell列表中选择用于shell服务器执行切换处理的预定shell;
S5,将选择信号转发给shell服务器。
可选地,上述实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种shell处理方法,其特征在于,包括:
接收第一显示请求信息;
根据所述第一显示请求信息显示shell列表,其中,所述shell列表中包括两个以上shell;
接收选择信号,其中,所述选择信号用于从所述shell列表中选择预定shell;
根据所述选择信号执行切换到所述预定shell的处理。
2.根据权利要求1所述的方法,其特征在于:
接收所述第一显示请求信息包括:接收本地用户输入的所述第一显示请求信息和/或,接收远程登录Telnet服务器转发的所述第一显示请求信息;和/或,
接收所述选择信号包括:接收本地用户输入的所述选择信号和/或,接收远程登录Telnet服务器转发的所述选择信号。
3.根据权利要求1所述的方法,其特征在于,在根据所述选择信号执行切换到所述预定shell的处理之后,还包括:
接收本地用户输入的操作信号,和/或,接收远程登录Telnet服务器转发的操作信号,其中,所述操作信号用于对所述预定shell进行操作;
将所述操作信号转发到所述预定shell上;
接收所述预定shell根据所述操作信号进行处理后返回的处理结果;
显示所述处理结果,和/或,将所述处理结果发送给所述Telnet服务器。
4.一种shell处理方法,其特征在于,包括:
接收第二显示请求信息,其中,所述第二显示请求信息用于请求显示shell列表,所述shell列表中包括两个以上shell;
将所述第二显示请求信息转发给shell服务器;
接收所述shell服务器返回的所述shell列表;
接收选择信号,其中,所述选择信号用于从所述shell列表中选择用于所述shell服务器执行切换处理的预定shell;
将所述选择信号转发给所述shell服务器。
5.根据权利要求4所述的方法,其特征在于,在将所述选择信号转发给所述shell服务器之后,还包括:
接收用户输入的用于对所述预定shell进行操作的操作信号;
将所述操作信号转发给所述shell服务器,其中,所述操作信号被所述shell服务器转发到所述预定shell上;
接收所述shell服务器发送的处理结果,其中,所述处理结果为所述预定shell根据所述操作信号进行处理后返回的处理结果;
显示所述处理结果。
6.一种shell处理装置,其特征在于,包括:
第一接收模块,用于接收第一显示请求信息;
第一显示模块,用于根据所述第一显示请求信息显示shell列表,其中,所述shell列表中包括两个以上shell;
第二接收模块,用于接收选择信号,其中,所述选择信号用于从所述shell列表中选择预定shell;
切换模块,用于根据所述选择信号执行切换到所述预定shell的处理。
7.根据权利要求6所述的装置,其特征在于:
第一接收模块包括:接收用本地户输入的所述第一显示请求信息和/或,接收远程登录Telnet服务器转发的所述第一显示请求信息;和/或,
第二接收模块包括:接收本地用户输入的所述选择信号和/或,接收远程登录Telnet服务器转发的所述选择信号。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第三接收模块,用于接收本地用户输入的操作信号,和/或,接收远程登录Telnet服务器转发的操作信号,其中,所述操作信号用于对所述预定shell进行操作;
第一转发模块,用于将所述操作信号转发到所述预定shell上;
第四接收模块,用于接收所述预定shell根据所述操作信号进行处理后返回的处理结果;
第二显示模块,用于显示所述处理结果,和/或,将所述处理结果发送给所述Telnet服务器。
9.一种shell处理装置,其特征在于,包括:
第五接收模块,用于接收第二显示请求信息,其中,所述第二显示请求信息用于请求显示shell列表,所述shell列表中包括两个以上shell;
第二转发模块,用于将所述第二显示请求信息转发给shell服务器;
第六接收模块,用于接收所述shell服务器返回的所述shell列表;
第七接收模块,用于接收选择信号,其中,所述选择信号用于从所述shell列表中选择用于所述shell服务器执行切换处理的预定shell;
第三转发模块,用于将所述选择信号转发给所述shell服务器。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
第八接收模块,用于接收用户输入的用于对所述预定shell进行操作的操作信号;
第四转发模块,用于将所述操作信号转发给所述shell服务器,其中,所述操作信号被所述shell服务器转发到所述预定shell上;
第九接收模块,用于接收所述shell服务器发送的处理结果,其中,所述处理结果为所述预定shell根据所述操作信号进行处理后返回的处理结果;
第三显示模块,用于显示所述处理结果。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510349477.5A CN106325982A (zh) | 2015-06-23 | 2015-06-23 | shell处理方法及装置 |
PCT/CN2016/086749 WO2016206587A1 (zh) | 2015-06-23 | 2016-06-22 | shell处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510349477.5A CN106325982A (zh) | 2015-06-23 | 2015-06-23 | shell处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106325982A true CN106325982A (zh) | 2017-01-11 |
Family
ID=57586569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510349477.5A Withdrawn CN106325982A (zh) | 2015-06-23 | 2015-06-23 | shell处理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106325982A (zh) |
WO (1) | WO2016206587A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108810124A (zh) * | 2018-06-02 | 2018-11-13 | 上海清鹤科技股份有限公司 | 一种对公网环境下大量多媒体终端的远程访问控制*** |
WO2020114217A1 (zh) * | 2018-12-05 | 2020-06-11 | 中兴通讯股份有限公司 | 对进程进行调试的方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060129991A1 (en) * | 2004-12-13 | 2006-06-15 | Frank Kilian | Method and system for on-the-fly debugging |
CN101937369A (zh) * | 2009-06-30 | 2011-01-05 | 中兴通讯股份有限公司 | 一种多壳共享控制台的方法和*** |
CN103472977A (zh) * | 2013-09-24 | 2013-12-25 | 北京奇虎科技有限公司 | 一种标签页关闭时激活下一个标签页的方法及装置 |
CN103593239A (zh) * | 2013-10-28 | 2014-02-19 | 大唐移动通信设备有限公司 | Linux***中应用进程命令处理的方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100386732C (zh) * | 2005-07-05 | 2008-05-07 | 英业达股份有限公司 | 远程切换操控计算机平台备用***程序的方法及*** |
CN101615123A (zh) * | 2008-06-26 | 2009-12-30 | 比亚迪股份有限公司 | 一种移动终端操作***的引导方法及移动终端 |
CN104239039A (zh) * | 2014-09-03 | 2014-12-24 | 来安县新元机电设备设计有限公司 | 一种***切换的方法、移动终端和服务器 |
-
2015
- 2015-06-23 CN CN201510349477.5A patent/CN106325982A/zh not_active Withdrawn
-
2016
- 2016-06-22 WO PCT/CN2016/086749 patent/WO2016206587A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060129991A1 (en) * | 2004-12-13 | 2006-06-15 | Frank Kilian | Method and system for on-the-fly debugging |
CN101937369A (zh) * | 2009-06-30 | 2011-01-05 | 中兴通讯股份有限公司 | 一种多壳共享控制台的方法和*** |
CN103472977A (zh) * | 2013-09-24 | 2013-12-25 | 北京奇虎科技有限公司 | 一种标签页关闭时激活下一个标签页的方法及装置 |
CN103593239A (zh) * | 2013-10-28 | 2014-02-19 | 大唐移动通信设备有限公司 | Linux***中应用进程命令处理的方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108810124A (zh) * | 2018-06-02 | 2018-11-13 | 上海清鹤科技股份有限公司 | 一种对公网环境下大量多媒体终端的远程访问控制*** |
CN108810124B (zh) * | 2018-06-02 | 2020-07-31 | 北京清鹤科技有限公司 | 一种对公网环境下大量多媒体终端的远程访问控制*** |
WO2020114217A1 (zh) * | 2018-12-05 | 2020-06-11 | 中兴通讯股份有限公司 | 对进程进行调试的方法、装置及存储介质 |
CN111274122A (zh) * | 2018-12-05 | 2020-06-12 | 中兴通讯股份有限公司 | 对进程进行调试的方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2016206587A1 (zh) | 2016-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5923673A (en) | IEEE 1394 data/protocol analyzer | |
CN104683961B (zh) | 名片交互方法、装置和终端 | |
US20130305091A1 (en) | Drag and drop network topology editor for generating network test configurations | |
US8799398B2 (en) | Remote system and remote operation method for terminal | |
CN101042862B (zh) | 音频网络*** | |
CN102421112B (zh) | 移动终端的测试方法、移动终端模拟器、测试设备及*** | |
CN103326959B (zh) | 一种多网络制式的切换应用方法、***及云存储*** | |
EP3117327B1 (en) | Universal serial bus emulation of peripheral devices | |
CN108712308B (zh) | 虚拟网络中检测网络设备的方法和装置 | |
CN106325982A (zh) | shell处理方法及装置 | |
US11700297B2 (en) | Device for loading data into computer processing units from a data source | |
RU2512111C2 (ru) | Устройство и способ связи | |
US20150256446A1 (en) | Method and apparatus for relaying commands | |
CN107332872A (zh) | 一种基于VPN连接实现Android设备网络灵活管控的方法 | |
CN103795603A (zh) | 一种基于多网卡的边缘虚拟桥接的实现方法和设备 | |
CN110209556A (zh) | 容灾测试方法、支付方法、装置、介质及服务设备 | |
CN104184843B (zh) | 数据转发装置和方法 | |
CN111026525B (zh) | 云平台虚拟导流技术的调度方法及装置 | |
CN116132344A (zh) | 基于K8s集群的容器服务调试方法及装置、电子设备 | |
CN108234174A (zh) | 虚拟网络功能的管理方法和装置 | |
US20050060394A1 (en) | Programmable delay, transparent switching multi-port interface line card | |
CN113259791B (zh) | 信息配置方法、电子设备及计算机可读存储介质 | |
CN109698774A (zh) | 用于监测设备工作状态的方法及装置 | |
CN109167707A (zh) | 一种分流设备测试***、方法、装置、服务器及存储介质 | |
CN110233818A (zh) | 测试数据报文异常的方法、装置和计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20170111 |