-_Alex_-
1

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

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

Author24 — интернет-сервис помощи студентам
/*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
Ответы с готовыми решениями:

Обмен данными между процессами, сокеты
чувствую я пока вообще не врубаюсь помогите разобраться как передать данные другому процессу через...

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

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
Как решать конфликты слияния (merge) в Git
bytestream 22.01.2025
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках кода. Эти конфликты представляют. . .
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru