在linux中创buildsubprocess并处理可能失败的最佳方法

在linux中创buildsubprocess并处理可能失败的最佳方法,第1张

概述在linux中创buildsubprocess并处理可能失败的最佳方法

我有父母的过程,必须创造less数儿童进程。 我发现最好的方法是使用fork + execl 。 但是父进程需要知道具体孩子的execl是否失败,我不知道如何实现。

int pID = fork(); if (pID < 0) { std::cout << "ERROR on fork." << std::endl; } if (pID == 0) { execl("/my/program/full/path",(char *)NulL); exit(1); } else { if (/*child's process execl fails*/) { std::cout << "it Failed" << std::endl } else { std::cout << "child born" << std::endl } }

我觉得这个想法不好:

int status(0); sleep(100); int res = waitpID(pID,&status,WNOHANG); if (res < 0 && errno == 10) { std::cout << "it Failed" << std::endl } else { std::cout << "child born" << std::endl }

因为希望孩subprocess在100毫秒后死亡是不好的,所以我想知道,只有这样才会发生。

我也认为为这样的检查创buildshared_memory或特殊的pipe道连接是一个对蜜蜂大炮。

如何使用Cython将Python 3编译为C

哪里可以获得设备types常量说明?

如何获得与objdump输出的标签对应的ELF二进制文件中的文件偏移量?

使用c:未定义的OpenJobObject引用进行windows API编程

valIDation是否安装Visual C ++ 2008 SP1可再发行组件包没有在windowsregistry中search?

对此我必须有一个简单的解决scheme,那就是我还没有find。

什么是最好的方法来实现呢?

如何通过makefile包含头文件

涉及`std :: string`的编译会导致windows错误状态

错误应用程序<app_name>,版本<版本号>,错误模块kernel32.dll

如何从windows中的C ++程序执行另一个exe

C ++ WinSock蓝牙连接 – AT命令 – 收到错误

作为一个通用的解决方案,您可以使用sigaction()在父项中注册信号处理程序(SIGUSR1)。

在一个孩子中:取消注册信号处理程序,如果execl()调用失败,则需要将SIGUSR1发送给父项。

在父:每个孩子的PID我们将存储在标准::集。 当所有孩子都被创建后,您只需创建一个单独的线程来跟踪孩子。 在线程函数中,只需调用wait()并从集合中删除pID。 另一种方法来侦听SIGCHLD信号(但它会导致更复杂的解决方案,所以如果产生另一个线程是一个选项,我会使用线程)。

当这个集合是空的,我们已经完成了。

总结

以上是内存溢出为你收集整理的在linux中创buildsubprocess并处理可能失败的最佳方法全部内容,希望文章能够帮你解决在linux中创buildsubprocess并处理可能失败的最佳方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1285172.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存