gpt4 book ai didi

c - 信号 - 使用 CTRL-C 终止进程并使用 CTRL-Z 停止进程 + 测量时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:41 24 4
gpt4 key购买 nike

我需要制作一个程序,让进程无限期地写入三个点。当按下 CTRL+C(使用 SIGINT)时,程序需要写入再见消息并终止进程。当按 CTRL+Z 然后按 fg(使用 SIGCONT)时,程序需要测量耗时这次以秒为单位,程序每过一秒就需要写一个点。当程序写入所有点数为 1 时,它返回到三个点数。

$ ./program
...
...
...
...
... <pressing Ctrl+Z>
$ <we wait few seconds (5)>
$ fg
.
.
.
.
.
...
...
...
...
<pressing Ctrl+C>
Ending
$

我设法完成了第一部分(在无限循环中使用 CTRL+C 终止了进程)但是我找不到测量使用 CTRL+Z 停止进程后的时间,然后继续使用 fg。

当前工作代码:

bool stop = true;

void end(int sig){
printf("ending\n");
//signal(SIGINT, SIG_DFL);
//kill(getpid(), SIGINT);
stop = false;
}

int main(){
struct sigaction act;
act.sa_handler = end;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGINT, &act, 0);
while(stop) {
printf("...\n");
sleep(1);
}
return 0;
}

我打算如何测量时间:

t = clock();
pause();
t = clock() - t;
double time = ((double)t)/CLOCKS_PER_SEC;
printf("time: %f", time);

最佳答案

引用 man signal,

SIGSTOP cannot be caught or ignored.

我看到的唯一解决方案是轮询当前时间,并测量当前和上一个样本之间的增量。足够大的差异很可能表明程序已停止。

这并不精确,但我想这对你的锻炼来说已经足够了。

PS:不要在信号处理程序中printf

关于c - 信号 - 使用 CTRL-C 终止进程并使用 CTRL-Z 停止进程 + 测量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49395268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com