gpt4 book ai didi

C:向 child 发送信号导致无限循环

转载 作者:行者123 更新时间:2023-11-30 17:37:52 25 4
gpt4 key购买 nike

我的代码遇到以下问题。当子进程收到 SIGHUP 时,它(子进程)应该从 0 开始计数(工作正常),但是当父进程收到信号 hup 时,它应该让所有子进程再次从 0 开始计数,但是当发送信号时,就会发生无限循环和 on_hup 函数之类的情况因为家长一直被调用并且不会停止:( 提前致谢。

#include <signal.h>
#include <stdio.h>
#include <wait.h>
#include <unistd.h>
#include <sys/types.h>
//#include "err.h"
#define NR_PROC 3

pid_t pid;
int a;
int pids[3];

void on_hup(int sig){
int i;
if(pid!=0)
kill(0,SIGHUP);
else
a=0;
}

void pierwsze(){
for (;a<10000;a++){
printf("%d: %d PID: %d \n",getpid(),a,pid);
fflush(stdout);
sleep(2);
}

}

struct sigaction init(){
struct sigaction sa;
sigset_t block_mask;
sigemptyset (&block_mask);
sa.sa_mask = block_mask;
sa.sa_flags=0;
sa.sa_handler=on_hup;
return sa;
}

int main(){
int i;
a=0;
struct sigaction setup_action = init();
sigaction(SIGHUP,&setup_action,0);

for(i=0;i<NR_PROC;i++){
switch(pid = fork()){
case -1:
fprintf(stderr,"Error w fork \n");
case 0:
pids[i]=getpid();
pierwsze();
return 0;
default:
printf("I am parent My PID = %d\n",getpid());
printf("fork = %d\n",pid);
}
}
while(1){}
wait(0);
return 0;
}

最佳答案

数组 pids 无法在父级和子级之间共享。

因此,您可以从父级上下文中插入它,而不是尝试将 pid 从子级上下文中放入数组中:

代码如下所示:

case 0:
pierwsze();
return 0;
default:
pids[i] = pid;
printf("I am parent My PID = %d\n",getpid());
printf("fork = %d\n",pid);

关于C:向 child 发送信号导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269977/

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