gpt4 book ai didi

c - 如何计算同时运行的所有子进程的总执行时间?

转载 作者:行者123 更新时间:2023-11-30 19:08:02 25 4
gpt4 key购买 nike

如何计算多个子进程的执行时间,这些子进程被 fork 并行运行并且具有相同的父进程?下面的代码是 fork 进程以并行运行还是串行执行?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
void forkChildren (int nChildren) {
int i,j;
pid_t pid;
pid_t my_id;
clock_t start, end;
double cpu_time_used;
for (i = 1; i <= nChildren; i++) {
pid = fork();
if (pid == -1) {
/* error handling here, if needed */
return;
}
if (pid == 0) {
/* printf("I am a child: %d PID: %d\n",i, getpid());*/
for(j=0;j<20000000;j++)
{
if(j%100==0)
{
my_id = getpid();
}
}
return;
}
}
}

int main (int argc, char *argv[]) {
clock_t start,stop;
double elapsed;
start = clock();
if (argc < 2) {
forkChildren (2);
} else {
forkChildren (atoi (argv[1]));
}
stop = clock();
elapsed = (double)(stop - start) * 1000.0 / CLOCKS_PER_SEC;
printf("Time elapsed in ms: %f", elapsed);
return 0;
}

前面的代码生成了多个输出执行时间,我认为是针对每个进程分别执行的。前面代码的结果如下所示。但我想计算所有 fork 进程执行所需的执行时间。

enter image description here

最佳答案

您只需阻塞父进程,直到所有子进程终止:

pid = fork();
if (pid == -1) {
/* error handling here, if needed */
return;
}
if (pid == 0) {
/* printf("I am a child: %d PID: %d\n",i, getpid());*/
for (j = 0; j < 20000000; j++) {
if (j % 100 == 0) {
my_id = getpid();
}
}
return;
} else {

while (pid = waitpid(-1, NULL, 0)) {
if (errno == ECHILD) {
break;
}
}
}

父进程将卡在 while 循环中,直到没有子进程离开,然后返回。因此,您可以计算所有子级完成执行所需的总时间。

关于c - 如何计算同时运行的所有子进程的总执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46122076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com