Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283

Генерация древа процессов используя fork

26.04.2016, 23:38. Показов 1728. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Битый час уже пытаюсь создать древо процессов по заданному образцу (0 1 1 2 2 5 6).
То есть первый процесс не имеет родителя среди ваших процессов (порождается из вне), второй и третий порождены первым, четвертый и пятый порождены вторым, шестой порожден пятым, а седьмой порожден шестым.

Ни как не получается сделать, кто понимает, что к чему, подскажите.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2016, 23:38
Ответы с готовыми решениями:

Fork создание процессов
Скажите, я правильно написал программку, создающую процессы? /*UTS*/ #include <unistd.h> #include <sys/types.h> #include...

Fork() и контроль порождённых процессов
Прошу сильно не писать, с сями дружу лишь на уровне алгоритмизации В общем есть следующее задание: Функциональные требования к...

Создание процессов, системный вызов fork()
Доброго времени суток, просьба разъяснить такой вопрос, написал такой код #include <stdlib.h> #include <sys/types.h> ...

15
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 07:42
Что значит "создать древо"?
0
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
27.04.2016, 07:51  [ТС]
dondublon, То есть, чтобы было создано несколько процессов и каждый их них насоздавал заданное количество дочерних процессов.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 08:39
И что не получается? Если вы можете запустить один форк-процесс, то сделать дерево уже не проблема.
0
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
27.04.2016, 08:45  [ТС]
Чтобы один (нулевой процесс), насоздавал кучу других проблем нет, теряюсь как сделать, чтобы созданные дочерние процессы сами создавали заданное количество процессов.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 09:08
Значит, порождённому процессу надо передавать параметр, сколько ему надо деток создать.
0
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
27.04.2016, 09:26  [ТС]
Это понятно, просто там получатся, что дочерние процессы тоже должны создавать другие процессы и как это написать используя fork я не понимаю (используется же один и тот же код для всех процессов).

Можешь помочь кодом, чтобы можно посмотреть как это делать? Хотяб просто абстрактный пример, а не конкретно моя задача.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 11:06
Команды fork, насколько я знаю, нет. Ты наверняка пользуешься subprocess, а ему можно передать параметр.

Следующий вопрос - что передать, как этот параметр должен выглядеть. Надо передать что-то такое, из чего можно вырезать кусок и передать дочернему процессу. Он тоже вырежет кусок и передаст своему дочернему и т. д.

Дерево процессов надо логически инвертировать - так, чтобы мы знали не родителя, а своих деток:
Python
1
{3:{}, 2:{4:{}, 5:{6:{7:{}}}}}
Первому процессу надо передать весь этот словарь. Он переберёт ключи, запустит деток - 2 и 3. Процессу 3 передаст пустой словарь, он ничего не породит. Процессу 2 - словарь с ключами 4 и 5, эти процессы будут порождены. И так далее, рекурсивно.
0
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
27.04.2016, 11:15  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Команды fork, насколько я знаю, нет
Но, она все таки есть https://docs.python.org/3/library/os.html#os.fork
Цитата Сообщение от dondublon Посмотреть сообщение
Ты наверняка пользуешься subprocess
Если бы его использовал, то ни каких проблем не особо не было, а нужно форкать процес
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 11:19
Цитата Сообщение от toxin Посмотреть сообщение
Но, она все таки есть https://docs.python.org/3/library/os.html#os.fork
Окей, был неправ.
Но этому форку надо обязательно передать параметр, хоть тресни. Subprocess - это обобщённый форк.
0
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
27.04.2016, 12:24  [ТС]
dondublon, я плаваю в этой теме, помоги примером кода пожалуйста

Добавлено через 8 минут
У самого пока только, что-то вроде этого вышло
Python
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
import os
 
tree_process = {
    0: {
        1: {
            3: {},
            4: {
                5: {6: {}}
            }
        },
        2: {}
    }
}
 
 
def child_hello():
    print(
        'Завершается дочерний процес №{}, порожденный процессом №{}'.format(
            os.getpid(), os.getppid())
    )
    os._exit(0)  # иначе произойдет возврат в родительский цикл
 
 
def parent(tree):
    for key in tree.keys():
        new_pid = os.fork()
        if new_pid == 0 and tree[key]:
            parent(tree[key])
            child_hello()
        else:
            print('Процес {}, породил процес {}'.format(os.getpid(), new_pid))
 
 
print('Нулевой процесс {}'.format(os.getpid()))
parent(tree_process)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 12:41
os.fork не принимает параметров. Поэтому придётся использовать subprocess.

Передавать словарь, видимо, придётся в виде строки. Либо в виде питоновского кода, тогда его читать функцией eval, либо в виде пикла (cPickle.dumps).

Процесс считает эту строку из sys.argv.

Добавлено через 44 секунды
Ах да ещё одно - исполняемый файл питона получить через sys.executable.
0
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
27.04.2016, 12:47  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
os.fork не принимает параметров.
Причем тут это вообще? При использовании fork для обмена данными используется общая память и выполняется один и тот же код.
Вообще похоже Вы, вообще не понимаете, что делает fork. Зачем, что-то советовать и говорить, если не имеете преставления о чем речь идет?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 13:01
Цитата Сообщение от toxin Посмотреть сообщение
Причем тут это вообще? При использовании fork для обмена данными используется общая память
Разные процессы по определению используют разную память. Общий кусок памяти (shared memory) выделить можно, конечно, но это надо специально делать. Код одинаковый, да, а память разная.

Цитата Сообщение от toxin Посмотреть сообщение
Зачем, что-то советовать и говорить, если не имеете преставления о чем речь идет?
Вы хотите, чтобы я доказывал вам, что всё-таки кое-что понимаю? Не стоит так стараться.
0
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
27.04.2016, 13:04  [ТС]
https://ru.wikipedia.org/wiki/Fork
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.04.2016, 13:05
И? Где я не прав?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2016, 13:05
Помогаю со студенческими работами здесь

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

Порождение процессов (fork) в цикле и их убийство (kill)
Всем привет. Прошу помочь с заданием. Такая проблема: при "убийстве" ребенка/родителя, его предок считает, что тот еще жив, показывая...

Распараллеливание процессов Fork и регистрация завершения (atexit)
Добрый день. Прошу помочь, нашёл кое-что, но не уверен что всё правильно по заданию сделал. Вот само задание: Нужно написать программу с...

Функция fork() - определить, сколько процессов будет порождено
Здравствуйте! Чувствую, что не в тот раздел пишу, но тем не менее, возник вопрос: если порождать новый процесс таким образом, то получится...

Параллельный запуск процессов с помощью fork(). Проверить код
Правильно ли я накидал параллельный запуск (в данном случае 10 ) процессов с помощью fork() ? if(pipe(filedes) == -1) { ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru