0

我有一个任务要编写一个程序来使用 fork off 一个孩子。该孩子将分叉出自己的孩子(原始父母的孙子)。孙子应该 exec() 做一个 ps -ef (例如)。孩子应该等待它的孩子(原始父母的孙子)成功完成。如果它没有成功完成(我假设状态返回码是 0),它应该产生另一个孙子,直到它成功。一旦完成,它应该将 SIGINT 信号发送给它的父级。


这就是我正在做的,第二次分叉孙子时,我按照指定执行。在这里,我也设置了一个信号处理程序。在孩子身上,我等待 (wait(&status)) 并循环 while (status != 0)。这就是想法。

但是,我仍然无法让程序正常工作。我想我的信号处理有问题(?)你能给我一个提示吗?

4

1 回答 1

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 过程中,如果你失败了,你想向你的父母抛出一个信号。并且当父母启动时,您可以检查是否收到了此信号。如果没有,您就知道它已成功完成。

于 2013-08-06T20:05:18.507 回答