getrusage()获取系统时间,用户时间。 Unix编程帮助

问题描述:

我正在编写一个shell,我需要一次启动多个子进程并记录系统时间和用户时间。getrusage()获取系统时间,用户时间。 Unix编程帮助

到目前为止,我能够做到这一点。唯一的问题是我使用wait4来获取子程序使用的系统资源,并将其放入我称之为用法的rusage结构中。

如何在同一时间启动所有进程并跟踪用户和系统时间?我可以删除wait4()系统调用并在外部使用它来循环,这样我可以让父母等待,但如果我这样做,那么我只能记录最后一个进程的时间,而不是所有时间。

你有什么想法我可以解决这个问题吗?

execute(commandPipev,"STANDARD",0); 
wait4(pid,&status,0,&usage); 
printf("Child process: %s\t PID:%d\n", commandPipev[0], pid); 
printf("System time: %ld.%06ld sec\n",usage.ru_stime.tv_sec, usage.ru_stime.tv_usec); 
printf("User time: %ld.%06ld sec\n\n",usage.ru_utime.tv_sec, usage.ru_utime.tv_usec); 

一个令人费解的答案。

在POSIX环境中,启动子项,然后使用waitid()WNOWAIT选项告诉您某个子项已退出。该选项使孩子处于等待状态 - 也就是说,您可以使用另一个等待家庭电话来获取所需的信息。然后,您可以使用非POSIX系统调用来获取刚退出的子级的使用情况信息,并处理您需要执行的会计处理。请注意,您可能会发现在waitid()wait4()调用之间终止了一个不同的进程;在回到waitid()调用之前,您需要使用循环和适当的标志和测试来收集所有可用的尸体(死亡子进程),以了解其他先前未完成的子进程。您还必须担心任何等待系列函数返回之前在后台启动并已完成的进程的信息。

wait4(2) Linux手册页显示,WNOWAIT可能与wait4(2)直接工作,所以你可以做这一切更干净 - 事实上,如果你需要的选项都没有。

请考虑您是否可以使用进程组将子进程分组在一起,以便更轻松地等待进程组的成员。