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

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

26.04.2016, 23:38. Показов 1731. Ответов 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
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 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
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru