gpt4 book ai didi

c - 信号处理程序中奇怪的 sleep 行为

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:15 26 4
gpt4 key购买 nike

祝你一切顺利

我想用 C 编写一个程序,无限循环并每 3 秒打印一次 pid 和 ppid,而不使用任何预定义的循环(暂时没有..)

问题是,当我在信号处理程序中使用 sleep 系统调用时,它不会打印任何内容,但当我评论时,它会无限循环并打印我想要的内容。

这是代码

#include<stdio.h>
#include<stdlib.h>

#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>

void handle1(int signum){
//sleep(3); // when i remove the sleep it loop infinitly and prints
printf("pid=%d ppid=%d",getpid(),getppid());
if(signum==SIGUSR1){
kill(getpid(),SIGUSR1);
}
}
int main(int argc , char* argv[]){
signal(SIGUSR1,handle1);
kill(getpid(),SIGUSR1);
}

最佳答案

C 标准几乎只允许您在影响全局状态的信号处理程序中做一件事。设置一个 volatile sig_atomic_t 变量。不允许在信号处理程序中调用 printfsleep 等。

许多程序违反了这些规则,所以系统让其他事情正常工作,你可能很幸运,你的 printf 恰好可以工作(在某些情况下肯定不会),但我能想到许多系统 sleep 没有工作的机会。

基本上,您违反了太多规则,如果这碰巧在某些系统上有效,那只是因为运气。不是因为它是一个正确的程序。

关于c - 信号处理程序中奇怪的 sleep 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41613943/

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