ACE-ACE_Process进程管理类

来源:互联网 发布:区块链技术编程语言 编辑:程序博客网 时间:2024/06/08 05:39

ACE的进程管理主要是使用Process.h和Process_Manager.h这两个文件,Process.h文件中包含ACE_Process、ACE_Process_Options两个类,ACE_Process_Options是对进程相关信息的描述,包括进程名,参数、环境变量、工作目录这几个常见的参数。ACE_Process类主要是对进程的操作,包括生成、终止、信号发送等。

ACE_Process_Options类的常用函数说明:

1、构造函数

  ACE_Process_Options (bool inherit_environment = true,                       size_t command_line_buf_len = DEFAULT_COMMAND_LINE_BUF_LEN,                       size_t env_buf_len = ENVIRONMENT_BUFFER,                       size_t max_env_args = MAX_ENVIRONMENT_ARGS,                       size_t max_cmdline_args = MAX_COMMAND_LINE_OPTIONS);

inherit_environment:是否继承现有进程的环境

command_line_buf_len:command-line参数的最大允许长度,默认1024

env_buf_len:环境参数最大长度,默认16 * 1024

max_env_args:最大允许环境参数个数,512

max_cmdline_args:最大允许cmdline参数个数,128

2、设置工作目录

void working_directory (const char *wd);
3、命令行运行参数

int command_line (const ACE_TCHAR *format, ...);int command_line (const ACE_TCHAR * const argv[]);

第一个参数以"\0"结尾,第二个参考argc的模式,以NULL结尾

4、进程名称(使用中为程序运行的路径)

void process_name (const ACE_TCHAR *name);
5、获取工作目录

ACE_TCHAR *working_directory (void);

6、获取命令行(字符串形式,以“\0”结尾)

ACE_TCHAR *command_line_buf (size_t *max_len = 0);

7、获取命令行(argv形式,以NULL结尾)

ACE_TCHAR * const *command_line_argv (void);


ACE_Process类常用函数

1、根据options创建新的进程

virtual pid_t spawn (ACE_Process_Options &options);
2、进程结束后需要调用的wait,如果不调用,会造成僵尸进程

  pid_t wait (ACE_exitcode *status = 0,              int wait_options = 0);

3、向进程发送信号

  int kill (int signum = SIGINT);

4、结束进程,而不等待其正常终止

  int terminate (void);


5、程序是否在运行,1:运行,0:未运行
  int running (void) const;

6、获取子进程返回值

  int return_value (void) const;

说明:此类如果使用默认赋值函数,会造成浅拷贝问题,如果想赋值其他类变量,建议使用new类变量。


例程:

test.cpp

#include <iostream>#include <ace/ACE.h>#include <ace/Init_ACE.h>#include <ace/Process.h>using namespace std;int main(){    ACE::init();    ACE_Process_Options apo;    //设置相关参数    apo.process_name("/home/dev/test/vfork/child/child");    apo.command_line("child -6");    apo.working_directory("/home/dev/test");        //获取相关参数    cout<<apo.process_name()<<endl;    cout<<apo.working_directory()<<endl;    cout<<apo.command_line_buf()<<endl;        //创建进程类    ACE_Process *ap = new ACE_Process;    //返回子进程pid    int nret = ap->spawn(apo);    cout<<"spawn运行返回子进程pid:"<<nret<<endl;        sleep(30);        //关闭子进程    ap->kill(SIGINT);        //调用wait,不调用的话会造成僵尸进程    nret = ap->wait();    cout<<"wait调用返回:"<<nret<<endl;        //获取子进程状态    cout<<"子进程运行状态:"<<ap->running()<<endl;    cout<<"子进程返回值:"<<ap->return_value ()<<endl;    return 0;}

child.txt

#include <iostream>#include <fstream>using namespace std;int main(int argc, char* argv[]){    cout<<"argc:"<<argc<<endl;    fstream fs;    fs.open("child.txt", ios::out | ios::app);    fs<<1<<endl;    fs.close();    sleep(5);    return 0;}

运行结果


在运行目录生成文件


子进程显示的名称中只显示command line参数


父进程相关参数返回

原创粉丝点击