unix – 确定fork / exec成功或失败的标准方法(父进程同时运行)?

前端之家收集整理的这篇文章主要介绍了unix – 确定fork / exec成功或失败的标准方法(父进程同时运行)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用fork()和exec *()创建了一个程序.问题是我无法确定来自父进程的exec()的成功或失败,因为它位于已分离的子进程上.我认为可以使用某种信号来检查这种状态,但我不知道这一点.

>推荐/标准/广泛使用的检查方式是什么?
>在做这件事时,我有什么陷阱?

问题详情更新(很抱歉遗漏重要细节)

我想保持两个进程都在运行,所以我不能等待退出子进程.换句话说,我希望收到关于子进程’exec成功或失败的通知.

您的父进程可以使用子进程的pid来检测它是活动的还是已经退出(并且可以消除错误代码的歧义,并且由于信号错误而死亡,请参阅waitpid).您可以使用某些错误代码或信号来通知父母特定的错误情况(例如,在执行前的分叉子项中),但对于完全通用的子项,您可能无法保留任何退出代码或信号(因为父母将无法判断exec是否成功,然后孩子退出这些值).

经常使用的另一种方法是创建一个管道fd对(参见’pipe’syscall),并将一端传递给子端(通常是写端),另一端传递给父端.孩子可以使用它向父母发送特定的错误代码.如果管道关闭而没有获得任何数据,父母可以检测到提​​前终止.存在一些缺陷:如果在没有活动编写器的管道上读取SIGPIPE将被发送到父级,并且在子进程中使用fd(除了stdin / stdout / stderr)可能会混淆一些写得不好的子进程(虽然close-on-exec可以帮助解决这个问题).

一般来说,我见过的使fork执行的所有代码都非常强大.

猜你在找的Bash相关文章