CN102169447B - 一种自定义外壳程序的注册、注销方法及相应的系统 - Google Patents

一种自定义外壳程序的注册、注销方法及相应的系统 Download PDF

Info

Publication number
CN102169447B
CN102169447B CN 201010122986 CN201010122986A CN102169447B CN 102169447 B CN102169447 B CN 102169447B CN 201010122986 CN201010122986 CN 201010122986 CN 201010122986 A CN201010122986 A CN 201010122986A CN 102169447 B CN102169447 B CN 102169447B
Authority
CN
China
Prior art keywords
self
master control
control process
shell
defined shell
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.)
Active
Application number
CN 201010122986
Other languages
English (en)
Other versions
CN102169447A (zh
Inventor
王继刚
钟卫东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN 201010122986 priority Critical patent/CN102169447B/zh
Priority to PCT/CN2010/073433 priority patent/WO2011103729A1/zh
Publication of CN102169447A publication Critical patent/CN102169447A/zh
Application granted granted Critical
Publication of CN102169447B publication Critical patent/CN102169447B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种自定义外壳程序的注册、注销方法及相应的系统,该注册方法包括:在用户态下启动用于请求注册自定义Shell的应用程序进程和用于注册自定义Shell的主控进程;该应用程序进程与该主控进程建立连接;该应用程序进程向该主控进程传输注册命令和需要注册的自定义Shell的信息;该主控进程对所述自定义Shell进行注册;该主控进程将注册结果返回给该应用程序进程。本发明在Linux\Unix系统中实现了在应用程序进程中注册所需Shell,以及注销无用自定义Shell的功能,并可在主控端对注册的自定义Shell进行监控和管理,从而提高开发人员和测试人员的工作效率,为开发和测试工作带来极大的方便。

Description

一种自定义外壳程序的注册、注销方法及相应的系统
技术领域
本发明涉及Linux/Unix操作系统中Shell(外壳程序)的注册、注销方法及相应的系统。
背景技术
目前,由于Linux的开源特性,Linux已经得到了广泛的运用。人们在使用Linux的过程中,需求也在日益倍增,其中之一就是实现在应用程序中注册自定义Shell的问题。
在Linux和Unix操作系统中,内核运行在内核态,应用程序运行在用户态,内核态有自己的系统级Shell,用户不能更改,而在用户态中也只能运行一种系统级Shell。但是在实际开发测试环境中,开发人员通常需要在各应用程序中注册自己需要的不同Shell,同时,若用户不再需要此Shell程序,还应该能够随时注销应用程序中自定义的Shell。而Linux自带的Shell工具有很大局限性,无法满足这些需求,难以普遍使用于实际应用环境。
针对上面这种情况,目前虽然有一些关于Shell方面的专利,但是还没有任何专利涉及本领域,也没有技术可以解决这个问题,因此寻找一个如何在用户应用程序中注册和注销自定义Shell的方法极其必要。
发明内容
本发明要解决的问题是提供一种管理自定义Shell的方法及系统,可以在应用程序进程中实现对自定义Shell的注册。
本发明要解决的另一问题是提供一种管理自定义Shell的方法及系统,可以在应用程序进程中实现对自定义Shell的注销。
为了解决上述技术问题,本发明提供了一种自定义外壳程序(shell)的注册方法,应用于Linux或Unix操作系统平台,该注册方法包括:
在用户态下启动用于请求注册自定义Shell的应用程序进程和用于注册自定义Shell的主控进程;
该应用程序进程与该主控进程建立连接;
该应用程序进程向该主控进程传输注册命令和需要注册的自定义Shell的信息;
该主控进程对所述自定义Shell进行注册;
该主控进程将注册结果返回给该应用程序进程。
进一步地,上述方法还具有下面特点:
该应用程序进程和该主控进程的连接是通过以下方式建立的:该主控进程在用户态下启动后运行一进程间通信的守护线程,该应用程序进程向该主控进程发出套接字(Socket)连接请求,该守护线程侦听到该Socket连接请求后,建立与该应用程序进程的Socket连接;
连接建立后,由该守护线程接收该应用程序进程传输的所述注册命令和需要注册的自定义Shell的信息,调用该主控进程提供的Shell的注册函数对所述自定义Shell进行注册,以及在完成注册后向该应用程序进程返回注册结果。
进一步地,上述方法还具有下面特点:
该应用程序进程是通过调用一应用编程接口(API)注册请求函数作为注册接口,来建立与该主控进程的连接,及实现与该主控进程间的数据传输。
进一步地,上述方法还具有下面特点:
所述注册命令和需要注册的自定义Shell的信息包含在该应用程序进程传输到该主控进程的一结构体数组中,其中,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
该守护进程完成注册后,将该结构体数组中的注册命令修改为已注册命令,在该结构体数组中加入根据所述自定义Shell的信息创建的虚拟终端从设备的名称,然后将包含注册结果的该结构体数组返回给该应用程序进程。
进一步地,上述方法还具有下面特点:
该主控进程在用户态下启动后还运行自定义Shell的管理线程,所述管理线程采用链表统一管理已注册的自定义Shell的相关信息,该相关信息包括自定义Shell的信息,根据自定义Shell的信息创建的虚拟终端的信息,以及为自定义Shell创建的远程登录(telnet)守护线程的信息。
为了解决上述技术问题,本发明还提供了一种基于Linux或Unix操作系统平台实现自定义外壳程序(shell)注册的系统,包括:
启动装置,用于在用户态下启动用于请求注册自定义Shell的应用程序进程和用于注册自定义Shell的主控进程;
连接装置,基于该应用程序进程和该主控进程实现,用于在该应用程序进程与该主控进程之间建立连接;
第一传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注册命令和需要注册的自定义shell的信息从该应用程序进程传输到该主控进程;
注册装置,基于该主控进程实现,用于对所述自定义shell进行注册;
第二传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注册结果从该主控进程返回给该应用程序进程。
进一步地,上述系统还具有下面特点:
所述连接装置建立该应用程序进程与该主控进程之间的连接时,是在该应用程序和该主控进程启动后运行的一进程间通信的守护线程之间建立起套接字(Socket)连接;
所述第一传输装置是通过所述Socket连接将注册命令和需要注册的自定义shell的信息,从该应用程序进程传输到该守护线程,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
所述注册装置是基于该守护线程调用该主控进程提供的Shell的注册函数实现对所述自定义Shell进行注册;
所述第二传输装置是通过所述Socket连接将注册结果从该主控进程返回给该应用程序进程,所述注册结构包括根据所述自定义Shell的信息创建的虚拟终端从设备的名称。
进一步地,上述系统还具有下面特点:还包括,
管理装置,用于基于该主控线程在用户态下启动后运行的自定义Shell的管理线程,采用链表统一管理已注册的自定义Shell的相关信息,该相关信息包括自定义Shell的信息,根据自定义Shell的信息创建的虚拟终端的信息,以及为自定义Shell创建的远程登录(telnet)守护线程的信息。
为了解决上述技术问题,本发明还提供了一种自定义外壳程序(shell)的注销方法,应用于Linux或Unix操作系统平台,该注销方法包括:
在用户态下启动用于请求注销自定义Shell的应用程序进程和用于注销自定义Shell的主控进程;
该应用程序进程与该主控进程建立连接;
该应用程序进程向该主控进程传输注销命令和需要注销的自定义Shell的信息;
该主控进程对所述自定义Shell进行注销;
该主控进程将注销结果返回给该应用程序进程。
进一步地,上述方法还具有下面特点:
该应用程序进程和该主控进程的连接是通过以下方式建立的:该主控进程在用户态下启动后运行一进程间通信的守护线程,该应用程序进程向该主控进程发出套接字(Socket)连接请求,该守护线程侦听到该Socket连接请求后,建立与该应用程序进程的Socket连接;
连接建立后,该守护线程接收该应用程序进程传输的所述注销命令和需要注销的自定义Shell的信息,调用该主控进程提供的Shell的注销函数对所述自定义Shell进行注销,完成注销后向该应用程序进程返回注销结果。
进一步地,上述方法还具有下面特点:
该应用程序进程是通过调用一应用编程接口(API)注销请求函数作为注销接口,来建立与该主控进程的连接,及实现与该主控进程间的数据传输。
进一步地,上述方法还具有下面特点:
所述注销命令和需要注销的自定义Shell的信息包含在该应用程序进程传输到该主控进程的一结构体数组中,其中,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
该守护进程完成注销后,将该结构体数组中的注销命令修改为关闭命令,删除所述自定义Shell的相关信息,然后将包含注销结果的该结构体数组返回给该应用程序进程。
为了解决上述技术问题,本发明还提供了一种基于Linux或Unix操作系统平台实现自定义外壳程序(shell)注销的系统,包括:
启动装置,用于在用户态下启动用于请求注销自定义Shell的应用程序进程和用于注销和管理自定义Shell的主控进程;
连接装置,基于该应用程序进程和该主控进程实现,用于在该应用程序进程与该主控进程之间建立连接;
第一传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注销命令和需要注销的自定义shell的信息从该应用程序进程传输到该主控进程;
注销装置,基于该主控进程实现,用于对所述自定义shell进行注销;
第二传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注销结果从该主控进程返回给该应用程序进程。
进一步地,上述系统还具有下面特点:
所述连接装置建立该应用程序进程与该主控进程之间的连接时,是在该应用程序和该主控进程启动后运行的一进程间通信的守护线程之间建立起套接字(Socket)连接;
所述第一传输装置是通过所述Socket连接将注销命令和需要注销的自定义shell的信息,从该应用程序进程传输到该守护线程,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
所述注销装置是基于该守护线程调用该主控进程提供的Shell的注销函数实现对所述自定义Shell进行注销;
所述第二传输装置是通过所述Socket连接将注销结果从该主控进程返回给该应用程序进程。
综上,本发明提供一种自定义外壳程序的注册、注销方法及相应的系统,在Linux\Unix系统中实现了在应用程序进程中注册所需Shell,以及注销无用自定义Shell的功能,并可在主控端对注册的自定义Shell进行监控和管理,从而提高开发人员和测试人员的工作效率,为开发和测试工作带来极大的方便。
附图说明
图1是本发明实施例的实现自定义shell注册的系统的示意图;
图2是本发明实施例的实现自定义shell注销的系统的示意图;
图3是本发明实施例的自定义Shell的注册方法的流程图;
图4是本发明实施例的自定义Shell的注销方法的流程图。
具体实施方式
下面结合附图及实施例对本发明的技术方案进行更详细的说明。
图1是本发明实施例的实现自定义外壳程序(shell)注册的系统的示意图,如图1所示,本实施例的系统是基于Linux或Unix操作系统平台来实现自定义shell的注册,包括:启动装置、连接装置、第一传输装置、注册装置和第二传输装置。
其中,启动装置,用于在用户态下启动用于请求注册自定义Shell的应用程序进程和用于注册自定义Shell的主控进程;
连接装置,基于该应用程序进程和该主控进程实现,用于在该应用程序进程与该主控进程之间建立连接;
第一传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注册命令和需要注册的自定义shell的信息从该应用程序进程传输到该主控进程;
注册装置,基于该主控进程实现,用于对所述自定义shell进行注册;
第二传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注册结果从该主控进程返回给该应用程序进程。
具体地,连接装置建立该应用程序进程与该主控进程之间的连接时,是在该应用程序和该主控进程启动后运行的一进程间通信的守护线程之间建立起套接字(Socket)连接;
第一传输装置是通过所述Socket连接将注册命令和需要注册的自定义shell的信息,从该应用程序进程传输到该守护线程,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
注册装置是基于该守护线程调用该主控进程提供的Shell的注册函数实现对所述自定义Shell进行注册;
所述第二传输装置是通过所述Socket连接将注册结果从该主控进程返回给该应用程序进程,所述注册结构包括根据所述自定义Shell的信息创建的虚拟终端从设备的名称。
进一步地,本实施例的系统还可以包括一管理装置,可以用于基于该主控线程在用户态下启动后运行的自定义Shell的管理线程,采用链表统一管理已注册的自定义Shell的相关信息,该相关信息包括自定义Shell的信息,根据自定义Shell的信息创建的虚拟终端的信息,以及为自定义Shell创建的远程登录(telnet)守护线程的信息。
图2是本发明实施例的实现自定义外壳程序(shell)注销的系统的示意图,如图2所示,本实施例的系统是基于Linux或Unix操作系统平台来实现自定义shell的注销,包括:启动装置、连接装置、第一传输装置、注册装置和第二传输装置。
本实施例中,启动装置,用于在用户态下启动用于请求注销自定义Shell的应用程序进程和用于注销和管理自定义Shell的主控进程;
连接装置,基于该应用程序进程和该主控进程实现,用于在该应用程序进程与该主控进程之间建立连接;
第一传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注销命令和需要注销的自定义shell的信息从该应用程序进程传输到该主控进程;
注销装置,基于该主控进程实现,用于对所述自定义shell进行注销;
第二传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注销结果从该主控进程返回给该应用程序进程。
进一步地,连接装置建立该应用程序进程与该主控进程之间的连接时,可以是在该应用程序和该主控进程启动后运行的一进程间通信的守护线程之间建立起套接字(Socket)连接;
第一传输装置可以是通过所述Socket连接将注销命令和需要注销的自定义shell的信息,从该应用程序进程传输到该守护线程,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
注销装置,可以具体用于基于该守护线程调用该主控进程提供的Shell的注销函数实现对所述自定义Shell进行注销;
所述第二传输装置是通过所述Socket连接将注销结果从该主控进程返回给该应用程序进程。
为了实现对自定义Shell的注册,本实施例提供了用户态下统一的自定义Shell的注册接口,用于实现自定义Shell注册的应用程序进程可以直接调用该注册接口,并将该应用程序源文件与注册接口源文件一起编译。
在一个示例中,本实施例为自定义Shell的注册提供了专门的应用编程接口(Application Programming Interface,简称API)注册请求函数sh_register(char*name,int*sh_index),在自定义Shell的编程过程中可以直接调用该注册请求函数,然后在编译过程中将sh_register.c文件拷贝到自定义Shell的源码目录下,统一编译即可。该示例是将自定义Shell作为应用程序来实现对自身的注册,但在另一个示例中,也可以在其他的应用程序中调用该注册请求函数,实现对一个或多个自定义Shell的注册。
图3是本发明实施例的自定义Shell的注册方法的流程图,如图所示,包括下面步骤:
S11、在用户态下启动用于请求注册自定义Shell的应用程序进程和用于注册自定义Shell的主控进程;
S12、应用程序进程调用注册接口,启动自定义Shell的注册请求过程,向主控进程发出连接请求;
应用程序进程是通过调用一应用编程接口(API)注册请求函数作为注册接口,来建立与该主控进程的连接,及实现与该主控进程间的数据传输。
该注册接口可以为上述的API函数sh_register(char*name,int*sh_index)。
S13、主控进程侦听到该应用程序进程发出的连接请求后,建立与该应用程序进程的连接;
用户态下自定义Shell的注册和注销涉及多进程的操作,进程间的通信采用套接字(Socket)机制,主控进程在用户态下启动一进程间通信的守护线程(主控进程包括多个线程,守护线程是主控进程的一部分)local_socket来侦听进程间通信,该守护线程侦听到该应用程序进程发出的Socket连接请求后,建立起该主控进程与应用程序进程的Socket连接。在另一实施例中,也可以由主控进程直接进行进程间通信的守护,负责侦听、与应用程序进程间的通信和对Shell的管理,而不是运行多个线程。
S14、应用程序进程向主控进程传输注册命令和需要注册的自定义Shell的信息;
注册命令可以只有一种,也可以再细分为首次注册命令和重新注册命令。
本实施例中传输的自定义Shell的信息包括:自定义Shell的名称和应用程序进程的进程号等。该传输具体可以在主控进程的守护线程和应用程序进程之间进行。
在一个示例中,可以通过以下的结构体数组来传送上述信息:
typedef struct reg_sh_info
{
pid_t pid;//应用程序进程号
#define REGSH 0x55aaff00//注册命令定义
#define ASSIGNFD 0x55aaff01//已注册命令定义
#define RETRY 0x55aaff02//重新注册命令定义
#define UNREGSH 0x55aaff03//注销命令定义
#define CLOSEFD 0x55aaff04//关闭命令定义
int cmd;//命令名
char sh_name[16];//注册的Shell名称
char pty_name[16];//主控端分配的pty名称
}reg_sh_info_t;//结构体名称
该结构体数组包括应用程序进程号(pid)4字节,命令名(cmd)4字节,注册的Shell名称(sh_name)和pty名称(pty_name)各16字节,总共40字节的信息。其中的cmd设置为REGSH,将data.pid设置为getpid(),getpid()设置为所述应用程序进程的进程号。
S15、主控进程收到应用程序进程传输的自定义Shell的信息后,识别出其中的命令名为注册命令,调用操作系统提供的注册函数注册所述自定义Shell,并将注册结果返回给应用程序进程;
具体地,主控进程的守护线程获取来自应用程序进程传送的自定义Shell的信息如上述的reg_sh_info_t数组后,根据数组中的cmd来进行操作。当cmd为REGSH时,调用主控进程提供的注册函数registerOneShell(&data)进行自定义Shell的注册。注册成功后将cmd命令置为ASSIGNFD(已注册),并将reg_sh_info_t数组相关信息回传到应用程序进程,
注册函数registerOneShell(&data)所进行的注册操作可以包括:
记录该自定义Shell的信息,比如该自定义Shell的名称、列表序号和进程号等,以便主控进程对注册的自定义Shell进行管理。
根据该自定义Shell的信息创建相应的虚拟终端(PTY)并记录该pty的信息,包括pty主设备的名称、名柄,pty从设备的名称、句柄;
为该自定义Shell创建一个远程登录(telnet)守护线程,记录该telnet的信息,如进程号和端口号等,使用户可以通过telnet守护线程进行远程登录。
主控进程的守护线程完成对自定义Shell的注册后,将reg_sh_info_t结构体数组中的cmd置为ASSIGNFD,在pty_name[16]中写入pty从设备的名称,然后将修改后的数组返回给应用程序进程。
S16,应用程序进程收到主控进程返回的注册结果后,进行相关参数设置,关闭与主控进程的连接。
具体地,应用程序进程接收到主控进程的通讯守护线程返回的reg_sh_info_t结构体数组相关信息后,设置PTY属性。例如,可以将PTY属性设置为多用户或单用户等。
主控进程可以采用链表来统一管理已注册的自定义Shell的相关信息,在一个示例中,该链表的结构如下所示:
typedef struct list_pty
{
   struct list_pty*next;
   pid_t pid_sh;/*进程pid*/
   pid_t pid_tel;/*telnet的pid,仅用于用户定义shell*/
   int fdIndex;/*shell的列表序号*/
   int port;/*telnet登录的端口号*/
   int fd_m;/*pty主设备(master)句柄*/
   int fd_s;/*pty从设备(slave)的句柄,保存在一个全局变量中,由应用程序进程打开*/
  int fd_socket;/*telnetd(远程登录)socket句柄,方便在pthread_cancel(线程取消)telnetd时关闭连接*/
  char shell_name[16];/*注册shell的名字*/
  char ptym_name[32];/*pty master的设备名*/
  char ptys_name[32];/*pty slave的设备名*/
}list_pty_t;
为了实现对自定义Shell的注销,本实施例提供了用户态下统一的自定义Shell的注销接口,用于实现自定义Shell注销的应用程序进程可直接调用该注销接口,并将该应用程序源文件与注销接口源文件一起编译。
在一个示例中,本实施例为自定义Shell的注销提供了专门的应用编程接口(Application Programming Interface,简称API)注销请求函数sh_unregister(int*sh_index),在自定义Shell的编程过程中可以直接调用该注销请求函数,然后在编译过程中将sh_unregister.c文件拷贝到自定义Shell的源码目录下,统一编译即可。该示例是将自定义Shell作为应用程序来实现对自身的注销,但在另一个示例中,也可以在其他的应用程序中实现对自定义Shell进行注销。
图4是本发明实施例的自定义Shell的注销方法的流程图,如图所示,包括下面步骤:
S21、在用户态下启动用于请求注销自定义Shell的应用程序进程和用于注销自定义Shell的主控进程;
S22、应用程序进程调用注销接口,启动自定义Shell的注销请求过程,向主控进程发出连接请求;
应用程序进程是通过调用一应用编程接口(API)注销请求函数作为注销接口,来建立与该主控进程的连接,及实现与该主控进程间的数据传输。
该注销接口可以为上述的API函数sh_unregister(int*sh_index)。
S23、主控进程侦听到该应用程序进程发出的连接请求后,建立与该应用程序进程的连接;
主控进程与应用程序进程之间的具体连接操作与上述注册方法中的步骤S13中的连接操作一致,在本实施例是通过运行一进程间通信的守护线程来实现的,但本发明不局限于此,具体过程这里就不再重复说明。
S24、应用程序进程向主控进程传输注销命令和需要注销的自定义Shell的信息;
本实施例中传输的自定义Shell的信息包括:自定义Shell的名称和应用程序进程号。该传输具体可以在主控进程的守护线程和应用程序进程之间进行。
在一个示例中,仍可以通过上述步骤S14中的结构体数组来传送上述信息,其中的cmd设置为UNREGSH。
S25、主控端收到客户端传输的自定义Shell的信息后,识别出其中的命令名为注销命令,调用操作系统提供的注销函数注销所述自定义Shell,并将注销结果返回给客户端;
具体地,主控进程的守护线程获取来自应用程序进程传送的自定义Shell的信息如上述的reg_sh_info_t数组后,根据数组中的cmd来进行操作。当cmd为UNREGSH时,调用主控进程提供的注销函数unregisterOneShell()进行自定义Shell的注销,删除管理的该自定义Shell的相关信息。注销成功后将cmd命令置为CLOSEFD(关闭),并将reg_sh_info_t数组回传到应用程序进程。
S26,应用程序进程收到主控进程返回的注销结果后,关闭与主控进程的连接。
具体地,应用程序进程接收到主控进程的通讯守护线程返回的reg_sh_info_t结构体数组相关信息后,在sh_unregister()中将应用程序进程打开的pty从设备关闭,最后关闭进程间通信的socket口,这样,就完成了自定义shell的注销功能。
采用本发明所述的方法,与现有技术相比,实现了在Linux\Unix操作系统中,用户可以在应用程序进程中注册所需自定义Shell,以及注销无用自定义Shell的功能,从而提供了开发人员和测试人员的工作效率,为开发和测试工作带来极大的方便。
本发明的核心思想是通过在用户态下启动一个用户进程作为主控进程,用于管理用户自定义Shell,提供一种能在用户态下将自定义Shell注册到应用程序中,以及根据自身需要随时注销掉已注册的自定义Shell的方案。
以上所述仅为本发明的优选实例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可有各种更改和变化,本发明的保护范围以权利要求为准。

Claims (14)

1.一种自定义外壳程序(shell)的注册方法,应用于Linux或Unix操作系统平台,该注册方法包括:
在用户态下启动用于请求注册自定义Shell的应用程序进程和用于注册自定义Shell的主控进程;
该应用程序进程与该主控进程建立连接;
该应用程序进程向该主控进程传输注册命令和需要注册的自定义Shell的信息;
该主控进程对所述自定义Shell进行注册;
该主控进程将注册结果返回给该应用程序进程。
2.如权利要求1所述的注册方法,其特征在于:
该应用程序进程和该主控进程的连接是通过以下方式建立的:该主控进程在用户态下启动后运行一进程间通信的守护线程,该应用程序进程向该主控进程发出套接字(Socket)连接请求,该守护线程侦听到该Socket连接请求后,建立与该应用程序进程的Socket连接;
连接建立后,由该守护线程接收该应用程序进程传输的所述注册命令和需要注册的自定义Shell的信息,调用该主控进程提供的Shell的注册函数对所述自定义Shell进行注册,以及在完成注册后向该应用程序进程返回注册结果。
3.如权利要求1或2所述的注册方法,其特征在于:
该应用程序进程是通过调用一应用编程接口(API)注册请求函数作为注册接口,来建立与该主控进程的连接,及实现与该主控进程间的数据传输。
4.如权利要求2所述的注册方法,其特征在于:
所述注册命令和需要注册的自定义Shell的信息包含在该应用程序进程传输到该主控进程的一结构体数组中,其中,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
该守护线程完成注册后,将该结构体数组中的注册命令修改为已注册命令,在该结构体数组中加入根据所述自定义Shell的信息创建的虚拟终端从设备的名称,然后将包含注册结果的该结构体数组返回给该应用程序进程。
5.如权利要求2所述的注册方法,其特征在于:
该主控进程在用户态下启动后还运行自定义Shell的管理线程,所述管理线程采用链表统一管理已注册的自定义Shell的相关信息,该相关信息包括自定义Shell的信息,根据自定义Shell的信息创建的虚拟终端的信息,以及为自定义Shell创建的远程登录(telnet)守护线程的信息。
6.一种基于Linux或Unix操作系统平台实现自定义外壳程序(shell)注册的系统,其特征在于,包括:
启动装置,用于在用户态下启动用于请求注册自定义Shell的应用程序进程和用于注册自定义Shell的主控进程;
连接装置,基于该应用程序进程和该主控进程实现,用于在该应用程序进程与该主控进程之间建立连接;
第一传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注册命令和需要注册的自定义shell的信息从该应用程序进程传输到该主控进程;
注册装置,基于该主控进程实现,用于对所述自定义shell进行注册;
第二传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注册结果从该主控进程返回给该应用程序进程。
7.如权利要求6所述的系统,其特征在于:
所述连接装置建立该应用程序进程与该主控进程之间的连接时,是在该应用程序进程和该主控进程启动后运行的一进程间通信的守护线程之间建立起套接字(Socket)连接;
所述第一传输装置是通过所述Socket连接将注册命令和需要注册的自定义shell的信息,从该应用程序进程传输到该守护线程,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
所述注册装置是基于该守护线程调用该主控进程提供的Shell的注册函数实现对所述自定义Shell进行注册;
所述第二传输装置是通过所述Socket连接将注册结果从该主控进程返回给该应用程序进程,所述注册结果包括根据所述自定义Shell的信息创建的虚拟终端从设备的名称。
8.如权利要求7所述的系统,其特征在于:还包括,
管理装置,用于基于该主控线程在用户态下启动后运行的自定义Shell的管理线程,采用链表统一管理已注册的自定义Shell的相关信息,该相关信息包括自定义Shell的信息,根据自定义Shell的信息创建的虚拟终端的信息,以及为自定义Shell创建的远程登录(telnet)守护线程的信息。
9.一种自定义外壳程序(shell)的注销方法,应用于Linux或Unix操作系统平台,该注销方法包括:
在用户态下启动用于请求注销自定义Shell的应用程序进程和用于注销自定义Shell的主控进程;
该应用程序进程与该主控进程建立连接;
该应用程序进程向该主控进程传输注销命令和需要注销的自定义Shell的信息;
该主控进程对所述自定义Shell进行注销;
该主控进程将注销结果返回给该应用程序进程。
10.如权利要求9所述的注销方法,其特征在于,
该应用程序进程和该主控进程的连接是通过以下方式建立的:该主控进程在用户态下启动后运行一进程间通信的守护线程,该应用程序进程向该主控进程发出套接字(Socket)连接请求,该守护线程侦听到该Socket连接请求后,建立与该应用程序进程的Socket连接;
连接建立后,该守护线程接收该应用程序进程传输的所述注销命令和需要注销的自定义Shell的信息,调用该主控进程提供的Shell的注销函数对所述自定义Shell进行注销,完成注销后向该应用程序进程返回注销结果。
11.如权利要求9或10所述的注销方法,其特征在于:
该应用程序进程是通过调用一应用编程接口(API)注销请求函数作为注销接口,来建立与该主控进程的连接,及实现与该主控进程间的数据传输。
12.如权利要求10所述的注销方法,其特征在于:
所述注销命令和需要注销的自定义Shell的信息包含在该应用程序进程传输到该主控进程的一结构体数组中,其中,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
该守护线程完成注销后,将该结构体数组中的注销命令修改为关闭命令,删除所述自定义Shell的相关信息,然后将包含注销结果的该结构体数组返回给该应用程序进程。
13.一种基于Linux或Unix操作系统平台实现自定义外壳程序(shell)注销的系统,其特征在于,包括:
启动装置,用于在用户态下启动用于请求注销自定义Shell的应用程序进程和用于注销和管理自定义Shell的主控进程;
连接装置,基于该应用程序进程和该主控进程实现,用于在该应用程序进程与该主控进程之间建立连接;
第一传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注销命令和需要注销的自定义shell的信息从该应用程序进程传输到该主控进程;
注销装置,基于该主控进程实现,用于对所述自定义shell进行注销;
第二传输装置,基于该应用程序进程和该主控进程实现,用于通过所述连接将注销结果从该主控进程返回给该应用程序进程。
14.如权利要求13所述的系统,其特征在于,
所述连接装置建立该应用程序进程与该主控进程之间的连接时,是在该应用程序进程和该主控进程启动后运行的一进程间通信的守护线程之间建立起套接字(Socket)连接;
所述第一传输装置是通过所述Socket连接将注销命令和需要注销的自定义shell的信息,从该应用程序进程传输到该守护线程,所述自定义Shell的信息包括自定义Shell的名称和该应用程序进程的进程号;
所述注销装置是基于该守护线程调用该主控进程提供的Shell的注销函数实现对所述自定义Shell进行注销;
所述第二传输装置是通过所述Socket连接将注销结果从该主控进程返回给该应用程序进程。
CN 201010122986 2010-02-25 2010-02-25 一种自定义外壳程序的注册、注销方法及相应的系统 Active CN102169447B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN 201010122986 CN102169447B (zh) 2010-02-25 2010-02-25 一种自定义外壳程序的注册、注销方法及相应的系统
PCT/CN2010/073433 WO2011103729A1 (zh) 2010-02-25 2010-06-01 一种自定义外壳程序的注册、注销方法及相应的系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010122986 CN102169447B (zh) 2010-02-25 2010-02-25 一种自定义外壳程序的注册、注销方法及相应的系统

Publications (2)

Publication Number Publication Date
CN102169447A CN102169447A (zh) 2011-08-31
CN102169447B true CN102169447B (zh) 2013-03-27

Family

ID=44490613

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010122986 Active CN102169447B (zh) 2010-02-25 2010-02-25 一种自定义外壳程序的注册、注销方法及相应的系统

Country Status (2)

Country Link
CN (1) CN102169447B (zh)
WO (1) WO2011103729A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108833572B (zh) * 2018-06-28 2021-01-15 无锡沃尔福汽车技术有限公司 一种使ecu与未集成asap3协议的客户机建立通讯的方法和系统
CN108920381A (zh) * 2018-07-27 2018-11-30 广东浪潮大数据研究有限公司 一种nfs操作字性能测试的方法、系统及设备
CN110968434B (zh) * 2018-09-30 2022-12-02 武汉斗鱼网络科技有限公司 一种管理机器的方法及相关装置
CN111078508B (zh) * 2019-12-31 2022-07-26 杭州当虹科技股份有限公司 一种基于用户态文件系统的监控方法
CN113590217B (zh) * 2021-07-26 2022-12-02 北京百度网讯科技有限公司 基于引擎的函数管理方法、装置、电子设备及存储介质
CN115563183B (zh) * 2022-09-22 2024-04-09 北京百度网讯科技有限公司 查询方法、装置及程序产品
CN116661908B (zh) * 2023-07-26 2023-10-20 海看网络科技(山东)股份有限公司 一种epg系统输入方式注册方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000033989A (ko) * 1998-11-26 2000-06-15 이계철 내장형 시스템의 운영체제 개발을 위한 쉘 기능 제공 방법
CN1386222A (zh) * 2000-01-21 2002-12-18 梦擎科技股份有限公司 启动计算机中的应用软件的控制装置和控制方法以及采用上述装置和方法的多监视器计算机、客户一服务器系统和存储介质
CN101178662A (zh) * 2006-11-08 2008-05-14 中兴通讯股份有限公司 一种嵌入式linux应用进程的监控方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000033989A (ko) * 1998-11-26 2000-06-15 이계철 내장형 시스템의 운영체제 개발을 위한 쉘 기능 제공 방법
CN1386222A (zh) * 2000-01-21 2002-12-18 梦擎科技股份有限公司 启动计算机中的应用软件的控制装置和控制方法以及采用上述装置和方法的多监视器计算机、客户一服务器系统和存储介质
CN101178662A (zh) * 2006-11-08 2008-05-14 中兴通讯股份有限公司 一种嵌入式linux应用进程的监控方法

Also Published As

Publication number Publication date
WO2011103729A1 (zh) 2011-09-01
CN102169447A (zh) 2011-08-31

Similar Documents

Publication Publication Date Title
CN102169447B (zh) 一种自定义外壳程序的注册、注销方法及相应的系统
CN101150463B (zh) 测试方法和系统
KR101357261B1 (ko) 단축 메뉴 생성 장치와 생성 방법, 및 그 장치를 구비한 휴대용 단말
US20110191787A1 (en) System and method for providing sensor data from embedded device to software development environment
CN101137170A (zh) 一种嵌入设备的软件自动测试工具及方法
CN110362490B (zh) 融合iOS与Android移动应用的自动化测试方法及系统
CN108897591B (zh) 联合试验平台中间件插件装置及其试验资源信息交互的方法
CN102722440A (zh) 一种嵌入式系统可执行代码的调试装置、调试方法及嵌入式系统
CN107391219B (zh) 函数编译方法和装置
CN109669723A (zh) 硬件访问方法、装置、设备和机器可读介质
CN113553257B (zh) 测试方法、装置、存储介质及电子设备
CN110083342A (zh) 一种程序生成方法、装置以及计算机可读存储介质
CN104735271A (zh) 一种智能多媒体电话终端处理语音业务的方法及终端
JP2023070148A (ja) ロボティックプロセスオートメーション(rpa)ロボットをリソースへ動的にバインドさせるためのシステムおよび方法
JP2017506009A (ja) Ic無線装置
CN109614271A (zh) 多个集群数据一致性的控制方法、装置、设备及存储介质
CN112241373A (zh) 自动化测试方法、测试装置、处理器和测试系统
CN103917951B (zh) 应用调用的方法及操作系统、浏览器
CN104461553A (zh) 一种符合smi-s标准的存储管理方法
WO2011035659A1 (zh) 功能手机的二次开发方法及装置
CN116132344A (zh) 基于K8s集群的容器服务调试方法及装置、电子设备
KR101418390B1 (ko) 원격 응용 프로그래밍 디버깅시스템 및 그 제어방법
Anjum et al. Glueing grids and clouds together: a service-oriented approach
CN109144850A (zh) 移动终端的交互通信的测试方法及系统
CN108984238A (zh) 应用程序的手势处理方法、装置及电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant