Я напишу в ближайшее время, что я хочу сделать с моим кодом и каков реальный результат.
У меня есть родительский процесс, который создает два дочерних процесса. Каждый из двух процессов читает по 100 байт из другого файла, дочерний элемент 1 читается из «child1.txt», дочерний 2 читается из «child2.txt». Я хочу заставить казнить ребенка 2 перед ребенком 1 с помощью сигналов.
Я создал два дочерних процесса и приостановил их (пауза заканчивается, когда они получают сигнал). Итак, я отправил сигнал ребенку 2, а затем отправил сигнал ребенку 1. Таким образом, я ожидаю, что они будут делать то, что я хочу, но они этого не делают (это всегда показывает содержание child1.txt), и я не понимаю почему.
Это код
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <fcntl.h>
#include <wait.h>
void my_handler(int signo);
int main(int argc, char *argv[]){
signal(SIGCHLD,my_handler);
pid_t pid[2]; //here is where I save child pid
char buffer[100];
for (int i=0;i<2;i++){
if((pid[i]=fork())==0){
signal(SIGUSR1,my_handler);
int fd,nbyte;
pause();
if(i==0){
fd=open("Child1.txt",O_RDONLY);
}else{
fd=open("Child2.txt",O_RDONLY);
}
nbyte=read(fd,buffer,100);
buffer[nbyte-1]='\0';
write(STDOUT_FILENO,buffer,strlen(buffer));
exit(1);
}
sprintf(buffer,"Child %d\n",(int)pid[i]);
write(STDOUT_FILENO,buffer,strlen(buffer));
}
kill(pid[1],SIGUSR1); //I send a signal to unpause child2
wait(NULL); // wait child 2 to terminate
kill(pid[0],SIGUSR1); //unpause child 1
wait(NULL); // wait child 1 to terminate
}
void my_handler(int signo){
}