我有一个任务,要编写一个程序来使用fork off child。那个孩子将分叉自己的孩子(原父母的孙子)。孙子应使用exec()来执行ps -ef(例如)。子女应等待其子女(原父母的孙子女)成功完成工作。如果未成功完成(我假设状态返回码为0),则应派生另一个孙子直到成功。完成此操作后,应将SIGINT信号发送给其父级。
这就是我正在做的事情,第二次分叉孙子时,我按指定的方式执行。在这里,我也设置了一个信号处理程序。在孩子中,我等待(wait(&status))并循环播放(status!= 0)。那是主意。
但是,我仍然无法使该程序正常运行。我想我在信号处理方面有问题(?)您能给我一个提示吗?
最佳答案
不成功的事物的返回值为-1。在C中,它永远不是正值。
The exec() functions only return if an error has occurred. The return value is -1, and errno is set to indicate the error.
基本上,您要做的就是在孩子中等孙子。如果您的孙子调用exec失败,则您将从exec返回并继续在该程序(孙子)中执行。如果孙子成功,则不会有任何指示,除非您的子进程将再次开始。在gradchild流程中,如果失败,则要向父级发出信号。当父母开始时,您可以检查是否收到了该信号。如果没有,您知道它已成功完成。
关于c - 派生 child /孙子的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18089267/