当父母和孩子都执行exec()时等待孩子

轻歌

我发现了一个有趣的问题(请注意,我刚刚开始研究这个问题,所以我是UNIX系统调用,信号等的新手)到目前为止我还无法解决:

假设我们在main.c上有以下代码:

switch (fork()) {
    case -1:
        printf("error!");
        break;
    case 0: // child process
        execvp(childCommands[0], childCommands);
        break;
    default: // parent process
        execvp(parentCommands[0], parentCommands);
        break;
}

以任何方式,原始父进程都可以对其子进程执行wait()吗?

据我所知,在执行exec()之后,待处理的信号仍然保持待处理状态,但是没有为它们定义的捕获函数,因此我不确定是否可以在此处完成任何“信号魔术”。

乔纳森·莱夫勒

作为父进程运行的原始程序被替换为的default子句执行的新程序switch,并且(假设execvp()成功)意味着原始程序无法等待其子进程-原始程序不再运行。

但是,替换程序有一个可以等待的孩子,但是替换程序不太可能意识到该孩子的存在,直到它发现它调用了其中一个时从未获得过的孩子的状态。该wait()家庭的功能。这意味着任何派生其他进程并随后等待死孩子的程序都应容忍尸体不受其未创建的进程的影响;它的前一个程序可能创建了刚刚终止的进程。

您可能需要更改流程树的组织。例如,原始进程可能会分叉两次,第二个子进程将执行由parentCommands数组标识的命令,而原始进程将等待两个子进程都死亡。

或者,也许原始程序可以以某种方式告诉替换项孩子存在。有很多方法可以做到这一点(参数,环境变量,IPC机制等等)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery-当孩子有焦点时对父母执行操作

来自分类Dev

父母被杀时杀死孩子

来自分类Dev

悬停时影响父母的孩子

来自分类Dev

父母分页时,显示孩子

来自分类Dev

父母和孩子的订单查询

来自分类Dev

Caliburn.micro 父母->孩子和孩子->父母互动

来自分类Dev

在孩子悬停时更改父母-父母背景

来自分类Dev

在C语言中先于父母执行孩子

来自分类Dev

当所有孩子都具有flex属性时,父母的辩护内容是否重要?

来自分类Dev

父母溢出时触发孩子溢出

来自分类Dev

父母悬停时CSS转换孩子

来自分类Dev

父母和孩子中的点击事件

来自分类Dev

MySQL从表中选择父母和孩子

来自分类Dev

SQL查询选择孩子和父母

来自分类Dev

苗条:在父母和孩子之间转移道具

来自分类Dev

Laravel,由父母和孩子获得结果

来自分类Dev

修改WordPress中父母和孩子的图标

来自分类Dev

我如何使用班级的父母和孩子?

来自分类Dev

如何从位置获取父母和孩子的ID

来自分类Dev

MySQL按父母和孩子排序

来自分类Dev

结合父母名单和孩子名单

来自分类Dev

ActiveRecord:如何找到所有孩子都符合条件的父母?

来自分类Dev

向父母的孩子演员发送消息并等待结果

来自分类Dev

向父母的孩子演员发送消息并等待结果

来自分类Dev

获取特定孩子的父母和祖父母

来自分类Dev

让孩子和父母的父母一样宽

来自分类Dev

我如何将这个结果集展平以使父母和孩子都处于同一水平?

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子