Мне нужно выполнить «перфорированную статистику» в программе C для сбора статистики выполнения в реальном времени определенной функции, которая выполняется внутри цикла. Сценарий оболочки («perfExecution.sh») создан, который включает в себя,Выполнение «perf» в программе C
pid=$(pgrep programName)
perf stat -e cycles,instructions,cache-misses:uk -p $pid 2>perf_stat.out 1>temp2.out
Здесь «programeName» это имя моей программы C и «perfExecution.sh» выполняется в качестве дочернего процесса в основной C, прежде чем функции, которые должны быть проанализированы, вызываются.
pid_t childPID = fork();
char perfBuf[200];
int pid = getpid();
if (childPID == -1)
{
printf("failed to fork child\n");
_exit(1);
}
else if (childPID == 0)
{
std::cout << "started stat collection for: " << pid << "\n";
sprintf(perfBuf, "/home/user/Documents/Project/perfExecution.sh");
system(perfBuf);
}
/*
Functions to be measured.
*/
kill(childPID, SIGKILL);
/*
Collect the statistics generated from perf.
*/
`
Выходной файл всегда возвращает пустой, даже если он получает статистические данные о производительности, когда «perfExecution.sh» вручную выполняется в другом терминале. Может кто-нибудь, пожалуйста, дайте мне знать, как правильно фиксировать требуемые статистические данные в рамках программы?
Спасибо.
Уверены ли вы, что это C? Для меня это похоже на C++. –
@TrippKinetics Действительно, 'std :: cout' ... является C++, но вопрос в том, что C. –
Другим решением является использование' fork() 'и вариации' exec() ' –