2016-10-13 1 views
1

Ich habe ein Hauptprogramm, das zwei Kinder erstellt und jedes Kind ruft . Am Ende des Programms wie berechne ich die CPU-Zeiten und Systemzeiten des Elternteils und zwei Prozesse?Finden Sie CPU-Zeiten und Systemzeiten des Prozesses in Linux

#include <sys/types.h> 
#include <sys/wait.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <errno.h> 
#include <string.h> 
#include <stdlib.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <signal.h> 



int main() 
{ 


    pid_t pid1,pid2,wid; // variable for parent and two children 
    char *my_args[3];  // strign array for containing the arguments for executing sigShooter1 
// int aInt = 368;  // 
    char str[15];  // strign to contain the pids of children when passing as command line arguments 


    pid1 = fork(); 
    if (pid1 < 0) 
    { 
     fprintf(stderr, ": fork failed: %s\n", strerror(errno)); 
     exit(1); 
    } 

    if(pid1 == 0) 
    { 
     my_args[0] = "sigperf1"; 
     my_args[1] = "0"; 
     my_args[2] = NULL; 
     execv("sigshooter1",my_args); 
     fprintf(stderr,"sigshooter1 cannot be executed by first child..."); 
     exit(-1); 
    } 

    pid2 = fork(); 

    if(pid2 < 0) 
    { 
     fprintf(stderr, ": fork failed: %s\n", strerror(errno)); 
     exit(1); 
    } 

    if(pid2 == 0) 
    { 
     sprintf(str, "%d", pid1); 
     my_args[0] = "sigperf1"; 
     my_args[1] = str; 
     my_args[2] = NULL; 
    // printf("this is converted = %s\n",my_args[1]); 
     //sleep(1); 
     execv("sigshooter1",my_args); 
     fprintf(stderr,"sigshooter1 cannot be executed by second child..."); 
     exit(-1); 
    } 


wid = wait(NULL); 



} 

Antwort

1

Sie benötigen einen Profiler dafür. Für den Anfang können Sie perf stat ./a.out ausführen, um die gesamte CPU-Zeit aller drei Prozesse zu erhalten, und perf stat -i ./a.out, um nur die CPU-Zeit des übergeordneten Prozesses abzurufen.

Wenn Sie etwas detaillierter benötigen, sehen Sie sich ernsthaftere Werkzeuge wie valgrind oder gprof an.

Verwandte Themen