Я пытаюсь создать дочерний процесс, который посылает сигнал родителю, когда он готов (после выполнения какой-либо задачи).Когда сигнал отправляется, родитель не делает паузу и выполняет некоторую работу, а затем снова делает паузу, ожидая, пока ребенок снова не будет готов.Ребенок после отправки сигнала блокирует и ждет моего ввода, прежде чем отправить другой сигнал родительскому процессу.
Я хочу, чтобы это повторялось произвольное количество раз.Ниже мой подход:
void sig_handler(int sig){
if (sig == SIGTERM) printf("Working team is ready!\n");
return;
}
int main(){
//signal(SIGTERM,sig_handler);
char*** orders;
int NumOrders;
if ((orders = importFileToArray(&NumOrders)) != NULL){
SDFSort(orders, NumOrders);
int i,j;
for (i=0;i<NumOrders;i++){
for (j=0;j<4;j++){
printf("%s ", orders[i][j]);
}
printf("\n");
}
pid_t pid, ppid = getpid();
if ((pid = fork()) == 0){
int choice = 1;
while(1){
sleep(1);
kill(getppid(),SIGTERM);
//do some work
scanf("%d", &choice);
}
}else{
while(1){
signal(SIGTERM,sig_handler);
pause();
//do some work
}
wait(NULL);
}
}
}
Ниже вывод:
Working team is ready!
a
Working team is ready!
Working team is ready!
Working team is ready!
Working team is ready!
Working team is ready!
a
Working team is ready!
Working team is ready!
a
Working team is ready!
Working team is ready!
Working team is ready!
Working team is ready!
^C
Как вы можете видеть, это работает хорошо с первого раза (родительский блок. Ребенок посылает сигнал ссообщение «Рабочая группа готова» и родительский блок разблокируется. Но тогда вместо блокировки на scanf кажется, что ребенок продолжает посылать сигналы родителю, игнорируя мой ввод. Что я делаю неправильно?