Итак, я читал сообщения на StackOverflow и справочной странице форка, и я просто не понимаю поведения, которое вижу, вероятно, потому, что я ищу только то, что ожидаю.
Это простая программа, которая берет имя файла, порождает дочерний элемент, запускает stat() для файла, а затем возвращает SIGUSR1 или 2 обратно родителю в цикле. Родитель просто хочет знать, является ли это 1 или 2 ... Я получаю «Определенный пользователем сигнал 2», а затем программа завершает работу. Но родитель находится в цикле while, верно?
В любом случае, я действительно надеялся, что кто-нибудь сможет объяснить, почему я не получаю ожидаемого результата, в частности, цикл, чтобы постоянно запрашивать имя файла и каждый раз создавать дочерний элемент, а родитель должен знать, какой сигнал возвращает дочерний элемент с помощью kill() .
pid_t pid;
while(1) {
if(pid == 0) // i am the child
{
FILE *fp = fopen(fname, "r");
if(fp == NULL){
printf("%d] Child cannot find [%s].", msg++, fname);
fclose(fp);
}
else {
stat(fname, &st);
n = st.st_size;
printf("%d] Child read %d chars.\n", msg++, n);
if(n%2) kill(pid, SIGUSR1);
else kill(pid, SIGUSR2);
}
}
else // im the parent
{
if( signal(SIGUSR1,NULL) ) // Code never gets here because it ends
printf("%s is odd\n", fname );
if( signal(SIGUSR2, NULL) )
printf("$s is even\n", fname );
printf("%d] Enter filenames until you're happy. 'die' to end.\n", msg++);
scanf("%s", fname);
pid = fork();
}
}
return 0;
pid_t pid;
- person Grijesh Chauhan   schedule 30.01.2014