C 如何在一致的时间间隔内停止进程以执行测量功能?
我正在编写的分析器中使用LinuxPtraceAPI 我的伪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
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除非子进程可以停止,否则处理的信号根本不需要做任何事情。当接收到信号时,睡眠
(和其他类似功能)仍将返回。