Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
-_Alex_-

Обмен сигналами между процессами

09.10.2012, 23:28. Показов 3564. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
/*12.Процесс 1 открывает файл ипорождает потомка 2. Процесс 1 с интервалом в 1 секунду (через alarm)посылает M сигналов SIG1 процессу 2, который по каждому сигналу пишет вобщий файл по N чисел. Потом процесс 1 посылает процессу 2 сигнал SIG2,процесс 2 завершается. Процесс 1 считывает данные из файла и выводит их на экран.*/
Вот собственно задание, первый раз такими вещами занимаюсь. вот , что написал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <sys/types.h>
 
#include <fcntl.h>
 
#include <stdio.h>
#include <signal.h>
#include <unistd.h> /* close() */
#include <stdlib.h>
void f1(int);
void f2(int);
void f3(int);
pid_t pid2=-1;
 
void main()
{      
    int pid1, st, N=3, M=5;
 
    printf("Process 1, pid = %d:\n", getpid());     
    int i=0;
    
    pid1 = fork();
    if (pid1 == 0)
    {   
        printf("Process 2, pid = %d:\n", getpid());     
        pid2=getpid();
        signal(SIGUSR1, f2);
        sleep(1);
        //signal(SIGUSR2, f3);
        printf("Process 2: end\n");
    }else{
        while(i < M)
        {   
            signal(SIGALRM, f1);    
            alarm(2);
            i++;
            printf("%d",i);
            pause();        
        }
        //kill(pid2,SIGUSR2);
        if (pid1 < 0) printf("Cann't create process 2: error %d\n", pid1);
            
        wait(&st); //Ожидание завершения выполнения процесса-потомка         
        int fd1 = open ("vivod.txt",O_RDONLY);
        int a;
        //while(read(fd1, &a,4)>0)
        {       
            //printf("%d\n",a);
        }
        printf("Process 1: end\n");
        //exit(0);
    }
}
 
void f1(int si11)
{
    printf("%d",kill(pid2,SIGUSR1));
    printf("f1 work\n");
}
 
void f2(int si11)
    {
 
    signal(SIGUSR1, f2);
    sleep(2);
    //int fd = open ("vivod.txt",O_RDWR|O_CREAT);//, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);//,mode S_IRUSR
    int a=0;
    //if (fd > -1)
        //while(a < N)
        {
            //write(fd, &a,4);
            a++;
        }
    //int fd1 = open ("vivod.txt",O_RDONLY);
    //close(fd);
    printf("Process2 for timer\n");
    //pause();
    }
 
void f3(int abc)
{
//kill(pid2, SIGKILL);
}


Много комментов, отлаживал прогу. проблема вот в чем, не удается подождать во 2 процессе, сигнал из 1, который посылается по таймеру.застрял на этом в общем.

Спасибо заранее, кто откликнется.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2012, 23:28
Ответы с готовыми решениями:

Обмен данными между процессами, сокеты
чувствую я пока вообще не врубаюсь помогите разобраться как передать данные другому процессу через сокеты #include &lt;stdio.h&gt; ...

Разделения вычислений между несколькими процессами
Реализовать задание, с учетом разделения вычислений между несколькими процессами. Для обмена информацией между процессами использовать...

Отправка сообщений между дочерними и родительским процессами (fork,pipe,write,read)
Здравствуйте, помогите реализовать отправку сообщений по следующей схеме: Попытался самостоятельно реализовать первую схему, вот что...

1
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
11.10.2012, 09:50
Код не читаем, пожалуйста используйте тэги для форматирования кода.
PS: у Вас C, а не CPP

Добавлено через 23 часа 37 минут
Добрый модератор сделал это за Вас
Цитата Сообщение от -_Alex_- Посмотреть сообщение
Процесс 1 открывает файл ипорождает потомка
У Вас нет открытия файла до fork();
Цитата Сообщение от -_Alex_- Посмотреть сообщение
проблема вот в чем, не удается подождать во 2 процессе, сигнал из 1
например
C
1
2
while (1)
    pause();
а в обработчике USR2
C
1
_exit(0);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2012, 09:50
Помогаю со студенческими работами здесь

Обмен данными между потоками
Доброе время суток. У меня встал такой вопрос: нужно из главного потока в другой послать данные. В интернете искала какими функциями для...

Обмен данными между процессами
При создании дочернего процесса при помощи функции BOOL CreateProcess ( LPCTSTR lpApplicationName, // имя...

Можно обмениваться сигналами между разными процессами?
Здравствуйте. Есть два процесса (Windows) - 1.exe и 2.exe, в обоих процессах используется Qt и есть классы от QObject, можно ли...

Обмен объектами между процессами...
Дано: 1) Test.dll с классом CTest 2) Client1.exe в котором подключется Test.dll и создается объект myCTest класса CTest и каким-то...

Обмен сообщениями между процессами
Необходимо передать некую информацию из одного процесса (службы) в клиентское приложение, расположенное на той же машине. Каким образом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru