如何使用wait
?它总是让我困惑不已。我用递归fork
了一棵进程树,现在子进程必须暂停(等待/睡眠),等我运行pstree以便打印进程树。
我应该使用什么?
int status;
wait(&status);
或者说
wait(NULL)
我应该把这段代码放在哪里?放在父级的if(pid > 0)
还是子级的 if(pid==0)
?也许应该放在所有ifs的结尾,然后将所有的pid
存储到数组中,再使用for
循环处理并使用wait
函数?
我的代码模板:
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);
}
}
睡眠(1);
等待1秒。 - user3451749wait
和sleep
手册页面。我相信你很快就能找到它们之间的区别。 - Some programmer dudefork
的工作原理。我也能区分sleep
和wait
的不同。我不知道的是int status
是什么,何时使用status
或者何时使用NULL
,以及在哪里使用wait
才能使用pstree
。 - jabk