【发布时间】:2014-07-05 18:27:17
【问题描述】:
如何使用wait?它让我无所适从。我fork 一个带有递归的 proc 树,现在孩子们必须在我运行 pstree 时暂停(等待/睡眠),以便我可以打印 proc 树。
我应该使用
int status;
wait(&status);
或者说
wait(NULL)
我应该把这个放在哪里?在父级if(pid > 0) 或子级if(pid==0) 中?也许在 ifs 的末尾,所以我将所有 pids 存储在数组中,然后在它们上运行 for 并使用等待?
我的代码模板:
void ProcRec(int index)
{
pid_t pid;
int noChild = getNChild(index);
int i= 0;
for(i = 0; i < noChild; i++)
{
pid = fork();
if (pid > 0)
{
/* parent process */
}
else if (pid == 0)
{
/* child process. */
createProc(index+1);
}
else
{
/* error */
exit(EXIT_FAILURE);
}
}
if(getpid() == root)
{
sleep(1);
pid = fork();
if(pid == 0)
execl("/usr/bin/pstree", "pstree", getppid(), 0);
}
}
【问题讨论】:
-
sleep(/*How many seconds do you want to wait*/);。sleep(1);等待 1 秒。 -
这些链接可以帮助您更好地理解 fork() 和 wait() 的工作原理。看看他们,然后回到你的问题。如果没有帮助,请寻求帮助csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/wait.html,stackoverflow.com/questions/6210638/…,csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html
-
我了解
fork的工作原理。我还区分了sleep和wait。我不知道int status是什么,何时使用status或何时使用NULL以及我应该在哪里使用wait所以我可以使用pstree