c-信号处理程序示例



我正在努力了解信号处理程序是如何工作的。我在geeksfogeek上看到了一个例子:

int val = 10;
void handler(int sig){
val += 5;
}
int main(){
pid_t pid;
signal(SIGCHLD, handler);
if((pid = fork()) == 0){
val -= 3;
exit(0);
}
waitpid(pid, NULL, 0);
printf("val = %dn", val);
exit(0);
}

我很困惑为什么输出值是15。最初,我猜测这是因为子进程在不同的地址中有变量val。然而,当我尝试在子进程及其父进程中打印val的地址时,它们都显示相同的内存地址。

打印的地址是一个虚拟地址,它是进程内存空间中全局变量的地址。子进程和父进程的内存空间看起来相同,但实际上并不相同(这意味着它们不占用相同的物理内存(。

这是一个非常高水平(有些不准确(的答案,我建议您阅读有关虚拟内存的内容,以便正确理解这一点。

相关内容

  • 没有找到相关文章

最新更新