如何在一致的时间间隔内停止进程以执行测量功能?

时间:2013-07-25 13:34:38

标签: c linux ptrace

我正在编写的探查器中使用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秒运行一次度量函数,直到子进程退出。

2 个答案:

答案 0 :(得分:3)

为什么不简单地只睡N秒,然后进行measure通话?如果你安装一个SIGCHLD处理程序来捕获子进程何时退出,那么例如sleep将被中断并返回剩余的秒数。

这样的东西
signal(SIGCHLD, sigchld_handler);

do
{
    measure();
} while (sleep(N) == 0);

waitpid(...);

答案 1 :(得分:0)

我只发现需要改变:

setjmp(env); // env是一个jum_buf值

然后

longjmp(env,1);// so if necessary, we can use :int flag = setjum(env); 

如果flag == 1;我知道代码调用sig_handler并返回。