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

C 如何在一致的时间间隔内停止进程以执行测量功能?,c,linux,ptrace,C,Linux,Ptrace,我正在编写的分析器中使用LinuxPtraceAPI 我的伪C代码如下所示: setjmp(); measure(); alarm(N); while(1) { waitpid(child, &status, WNOHANG); if(child_process_exiting) { measure(); break; } } 报警信号处理器如下所示: void sig_handler(int sig) { signal

我正在编写的分析器中使用LinuxPtraceAPI

我的伪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秒运行一次度量函数,直到子进程退出。

我只发现需要更改:

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

然后


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

我只发现这个需要更改:

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

然后


如果标志=1;我知道代码调用sig_handler和back。

为什么不简单地只睡
N
秒,然后进行
测量
调用?如果您安装了一个
SIGCHLD
处理程序以在子进程退出时捕获,则例如将被中断并返回剩余的秒数

差不多

signal(SIGCHLD, sigchld_handler);

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

waitpid(...);

为什么不简单地只睡
N
秒,然后执行
measure
调用?如果您安装了一个
SIGCHLD
处理程序以在子进程退出时捕获,则例如将被中断并返回剩余的秒数

差不多

signal(SIGCHLD, sigchld_handler);

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

waitpid(...);

您知道必须使用
WNOHANG
标志调用
waitpid
,否则它将被阻止吗?我没有。谢谢编辑。顺便说一下,将
setjmp
/
longjmp
与信号结合使用,并非所有系统都能工作。为了安全起见,您应该使用
sigsetjmp
/
siglongjmp
。感谢您的输入。我继续处理这个问题。你知道你必须用
WNOHANG
标志调用
waitpid
,否则它会阻塞吗?我没有。谢谢编辑。顺便说一下,将
setjmp
/
longjmp
与信号结合使用,并非所有系统都能工作。为了安全起见,您应该使用
sigsetjmp
/
siglongjmp
。感谢您的输入。我继续处理这个问题。处理程序在这种方法中会采取什么行动?@kobrien除非子进程可以停止,否则处理的信号根本不需要做任何事情。当接收到信号时,
sleep
(和其他类似函数)将返回。处理程序在这种方法中会采取什么操作?@kobrien除非子进程可以停止,否则处理的信号根本不需要做任何事情。当接收到信号时,
睡眠
(和其他类似功能)仍将返回。