私が書いているプロファイラーで Linux ptrace API を使用しています。
私の疑似 C コードは次のようになります。
setjmp();
measure();
alarm(N);
while(1) {
waitpid(child, &status, WNOHANG);
if(child_process_exiting) {
measure();
break;
}
}
アラーム シグナル ハンドラは次のとおりです。
void sig_handler(int sig) {
signal(SIGALRM, sig_handler);
longjmp(env, 0);
}
子プロセスが終了してループを抜けるまで繰り返し setjmp 呼び出しに戻りたい。目標は、子プロセスが終了するまで N 秒ごとに測定関数を実行することです。