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

我使用fork()和exec *()创建了一个程序.问题是我无法确定来自父进程的exec()的成功或失败,因为它位于已分离的子进程上.我认为可以使用某种信号来检查这种状态,但我不知道这一点.

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

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

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

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

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

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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...