首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信号处理程序示例

信号处理程序示例
EN

Stack Overflow用户
提问于 2020-11-16 11:54:23
回答 1查看 63关注 0票数 0

我想了解信号处理程序是如何工作的。我看到了一个关于极客健忘的例子:

代码语言:javascript
复制
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 = %d\n", val);
    exit(0);
}

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

EN

回答 1

Stack Overflow用户

发布于 2020-11-16 13:00:35

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64857554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档