我使用fork()和exec *()创建了一个程序.问题是我无法确定来自父进程的exec()的成功或失败,因为它位于已分离的子进程上.我认为可以使用某种信号来检查这种状态,但我不知道这一点.
>推荐/标准/广泛使用的检查方式是什么?
>在做这件事时,我有什么陷阱?
问题详情更新(很抱歉遗漏重要细节)
您的父进程可以使用子进程的pid来检测它是活动的还是已经退出(并且可以消除错误代码的歧义,并且由于信号错误而死亡,请参阅waitpid).您可以使用某些错误代码或信号来通知父母特定的错误情况(例如,在执行前的分叉子项中),但对于完全通用的子项,您可能无法保留任何退出代码或信号(因为父母将无法判断exec是否成功,然后孩子退出这些值).
经常使用的另一种方法是创建一个管道fd对(参见’pipe’syscall),并将一端传递给子端(通常是写端),另一端传递给父端.孩子可以使用它向父母发送特定的错误代码.如果管道关闭而没有获得任何数据,父母可以检测到提前终止.存在一些缺陷:如果在没有活动编写器的管道上读取SIGPIPE将被发送到父级,并且在子进程中使用fd(除了stdin / stdout / stderr)可能会混淆一些写得不好的子进程(虽然close-on-exec可以帮助解决这个问题).
一般来说,我见过的使fork执行的所有代码都非常强大.