gpt4 book ai didi

c - 在 c 中使用信号

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

我正在用 c 语言编写一个简单的程序,我通过 fork 创建了一个子进程:

#include <stdio.h>
#include <stdlib.h>
#include<signal.h>
#include<sys/types.h>

int handler(){

}
int main(int argc, char **argv)
{

pid_t c=fork();
if(c>0){
sleep(1);
printf("f:pid is %d \n",getpid());
kill(c,SIGINT);
wait(NULL);
}

if(c==0){
pause();
signal(SIGINT,handler);
printf("child:pid is %d \n",getpid());
}
}

问题是 child 什么都不打印。我认为暂停只是等待一个信号来取消暂停进程,我不明白为什么打印永远不会发生。有什么想法吗?

最佳答案

您需要在暂停之前设置处理程序。否则,pause()会被signal打断,然后执行signal的默认 Action ,即终止进程。它永远不会添加处理程序,因为进程首先被终止。

    if(c==0){
signal(SIGINT,handler);
pause();
printf("child:pid is %d \n",getpid());
}

关于c - 在 c 中使用信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941770/

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