Пытаюсь использовать сигналы, но почему-то они теряются.
Программа, которая это демонстрирует:
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
int count = 0;
void handler(int s)
{
++count;
}
int main(int argc, char *argv[])
{
int n;
sigset_t ss;
struct sigaction sa;
int i;
pid_t pid;
if (argc != 2) {
fprintf(stderr, "incorrect usage\n");
return EXIT_FAILURE;
}
n = atoi(argv[1]);
if (sigemptyset(&ss) == -1) {
perror("sigemptyset");
return EXIT_FAILURE;
}
sa.sa_handler = handler;
sa.sa_mask = ss;
sa.sa_flags = 0;
if (sigaction(SIGUSR1, &sa, NULL) == -1) {
perror("sigaction");
return EXIT_FAILURE;
}
for (i = 0; i < n && (pid = fork()); ++i)
;
if (pid) {
while (1) {
printf("count before = %d\n", count);
/* pause(); */
sigsuspend(&ss);
printf("count after = %d\n", count);
}
}
else {
sleep(1);
if (kill(getppid(), SIGUSR1) == -1) {
perror("kill");
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}
Результат работы:
% ./test 100 /home/legioner/work/c/test
count before = 0
count after = 1
count before = 1
count after = 2
count before = 2
count after = 3
count before = 3
count after = 4
count before = 4
count after = 5
count before = 5
count after = 6
count before = 6
count after = 7
count before = 7
count after = 8
count before = 8
count after = 9
count before = 9
count after = 10
count before = 10
count after = 11
count before = 11
count after = 12
count before = 13
count after = 14
count before = 15
И дальше ничего, т.е. 75% сигналов потерялось.
Что я делаю не так?
Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от Onanim
Ответ на:
комментарий
от idle
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Помогите разобраться с сигналами (2003)
- Форум Помогите разобраться с программой! (2020)
- Форум Как ждать окончания процесса поражденного clone() ???? (2003)
- Форум [c++]Завершение процесса (2011)
- Форум POSIX таймеры (2011)
- Форум Как изменить максимальное число открытых файлов ? (2006)
- Форум ПОМОГИТЕ С ПРОГРАММОЙ. (2010)
- Форум проблема с чтением из FIFO (2024)
- Форум Некорректная работа учебной программы обработки сигналов (2012)
- Форум Обработка сигналов в программе на C (2023)