gpt4 book ai didi

c - 在c中父子进程之间发送信号

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

我正在尝试编写一个在父进程和子进程之间发送信号的程序。这是我目前所拥有的:

void parent_sig(int signo){
if(signo == SIGINT){
printf("*** Parent received SIGINT ***\n");
}else if(signo == SIGTSTP){
//first time
signal(SIGUSR1, c_sig_usr);

//second time
printf("*** Parent received SIGTSTP ***\n");
exit(0);

}else if(signo == SIGUSR1){
printf("*** Parent received SIGUSR1 ***\n");
sleep(3);
signal(SIGUSR1, c_sig_usr);
}else{
pause();
}

}

void child_sig(int signo){
if(signo == SIGINT){
printf("*** Child received SIGINT ***\n");
}else if(signo == SIGTSTP){
printf("*** Child received SIGTSTP ***\n");
}else if(signo == SIGUSR1){
printf("*** Child received SIGUSR1 ***\n");
sleep(3);
signal(SIGUSR1, p_sig_usr);
}else{
pause();
}
}

int main(void)
{
pid_t child, parent;
parent = getpid();

struct sigaction p_sig;
p_sig.sa_handler = &parent_sig;


if((child = fork()) < 0) {
perror("**ERROR**: failed to fork process");
exit(EXIT_FAILURE);
}else if (child == 0){
struct sigaction c_sig;
c_sig.sa_handler = &child_sig;
}else{

}


return 0;
}

我想要它

  • 使用 fork() 创建一个子进程
  • 如果收到SIGINT信号,打印一条消息但不退出
  • 如果收到SIGTSTP信号,第一次发送SIGUSR1信号给子进程,第二次打印消息退出
  • 如果收到SIGUSR1信号,发送SIGUSR1给对方进程
  • 否则两个进程都等待接收信号

我需要更改/添加什么到此代码才能使其正常工作?

最佳答案

signal() 是您用来配置在接收到特定信号时应调用函数的调用。

kill() 是您用来向特定进程 ID 发送特定信号的调用。

关于c - 在c中父子进程之间发送信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27030271/

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