c – fork和exec许多不同的进程,并从每个进程获得结果
发布时间:2020-12-16 10:19:03 所属栏目:百科 来源:网络整理
导读:我已经设法从我的应用程序中分叉并执行不同的程序.我正在研究如何等待从exec调用的进程通过管道或stdout返回结果.但是,我可以使用单个fork进行一组进程,还是需要多次fork并再次调用相同的程序?我可以为每个不同的流程获得PID吗?我希望我的应用程序调用相同
我已经设法从我的应用程序中分叉并执行不同的程序.我正在研究如何等待从exec调用的进程通过管道或stdout返回结果.但是,我可以使用单个fork进行一组进程,还是需要多次fork并再次调用相同的程序?我可以为每个不同的流程获得PID吗?我希望我的应用程序调用相同的程序,我目前正在调用多次但使用不同的参数:我想要一组8个进程运行同一个程序并通过管道返回结果.有人可以指点我正确的方向吗?我已经浏览了
linux.die手册页,但它们在描述中非常简洁和神秘.是否有电子书或PDF格式我可以找到详细信息?谢谢!
pid_t pID = fork(); if (pID == 0){ int proc = execl(BOLDAGENT,BOLDAGENT,"-u","2","-c","walkevo.xml",NULL); std::cout << strerror(errno) << std::endl; } 例如,我如何通过PID控制哪个子(根据参数xml文件)获得了哪个结果(通过管道或标准输出),从而采取相应的行动?我是否必须将子进程封装在一个对象中,然后从那里开始工作,还是可以将它们完全分组? 解决方法
One Fork系统调用只进行一个新进程(一个PID).你应该组织一些数据结构(例如pids数组,管道父节点数组等),从主程序中做8个fork(每个孩子都会执行exec)然后等待孩子.
在每个fork()之后,它将返回一个孩子的PID.您可以存储此pid和相关信息,如下所示: #define MAX_CHILD=8 pid_t pids[MAX_CHILD]; int pipe_fd[MAX_CHILD]; for(int child=0;child<MAX_CHILD;child++) { int pipe[2]; /* create a pipe; save one of pipe fd to the pipe_fd[child] */ int ret; ret = fork(); if(ret) { /* parent */ /* close alien half of pipe */ pids[child] = ret; /* save the pid */ } else { /* child */ /* close alien half of pipe */ /* We are child #child,exec needed program */ exec(...); /* here can be no more code in the child,as `exec` will not return if there is no error! */ } } /* there you can do a `select` to wait data from several pipes; select will give you number of fd with data waiting,you can find a pid from two arrays */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |