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);
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参数
父进程相关参数返回
阅读全文
0 0
- ACE-ACE_Process进程管理类
- ACE_Process进程管理
- ACE进程管理
- ACE进程管理小结
- ACE进程管理
- ACE进程管理
- ACE主要应用框架与类别(六):进程管理
- ACE内存管理之ACE_Cached_Allocator类详解
- 使用ACE创建进程
- ACE中的进程
- ACE日志消息管理
- ACE日志消息管理
- ACE内存管理方式
- ACE日志消息管理
- ACE线程管理
- ACE的内存管理
- ace线程管理
- 利用ACE管理线程
- Drawerlayout侧拉菜单
- IOC控制反转 & DI依赖注入 & Service Locator服务定位器
- BaseActivity
- 用户用浏览器访问一个网站的时候背后的过程与步骤是怎样的?
- html,canvas——星星闪烁
- ACE-ACE_Process进程管理类
- BigInteger模板(c++实现)
- 网络协议
- 学习结构笔记
- JSP内置对象(9个常用的内置对象)
- 加快gradle的编译速度总结-亲身经历
- Fragment隐藏和显示和抽屉与判断网络
- Spring--- json
- Lambda Expressions(java8)