6 / 6 / 1
Регистрация: 03.01.2015
Сообщений: 30

Debian Linux - Создание процессов (дед, отец, сын), fork();

04.06.2015, 15:19. Показов 3012. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Появилось у меня несколько вопросов по созданию процессов. Может будете ругаться, но реально не могу понять.. Уже гугл облазил, но все не могу этого осилить. Первую тему немного не туда закинул. Не знаю, почему не перенесли(

Написал я программу на си.
Часть основного кода:
C
1
2
3
4
5
pid_t pid = fork( ); //создание нового процесса (создаем дочерний процесс)
 if (pid < 0) { printf("Error");
  }else if(pid > 0) {printf("This is parent %d", getpid()); // как я понимаю, этот getpid покажет идентификатор родительского процесса?
   }else {printf("This is child%d", getpid()); //а тут getpid покажет идентификатор дочернего процесса?
   }
Первый вопрос. Как мне создать например "ребенка" для дочернего процесса?
Тема с форума. Тут вижу, внутри используют execlp для запуска процесса, прочитал, за что она отвечает, но все равно не могу понять

C
1
"./child"
Первым аргументом должен же быть задан путь, не? Часть программы вообще не понимаю.

Второй вопрос, как мне задержать процесс, чтобы я мог например через ps или для большего удобства при большом колличестве созданных потомков через pstree? sleep сам по себе задерживает, но не процесс как я понял, а саму программу. waitpid() блокирует выполнение текущего процесса до тех пор, пока либо не завершится порожденный им процесс, а мне надо задержать все процессы, которые я создам. Тоже самое с wait вроде.

Ну и последнее.
Еще часть кода с несколькими вопросами:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pid_t pid;  // идентификатор процесса
    int status; // код статуса завершения процесса
 
/* При помощи fork cоздаем дочерний процесс */
 
    switch(pid = fork()) { // Мы тут приписали к пиду id процесса (не очень понимаю какого, ниже видно что дочернего).
 
        case -1:
            perror("fork");
            return -1;
 
        case 0:
            printf("Выполняется дочерний процесс\n");
 
/* Код статуса завершения равен 4 */
            exit(4);
    }
 
    printf("Выполняется родительский процесс\n");
    printf("Идентификатор дочернего процесса - %d\n", pid); // Почему приписался id дочернего? А не родителя например?
и кстати, что скажете, если для вызова "ребенка" для дочернего процесса использовать тот же fork?
Что-то типо
C
1
2
3
4
5
6
pid_t newpid
pid_t pid = fork();
if(pid > 0) {printf("This is parent ");
   }else {printf("This is child"); 
      newpid = fork();
   }
Или это бред? Проверить не могу, не могу задержать процессы, чтобы посмотреть дерево( Буду признателен за любые подсказки.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2015, 15:19
Ответы с готовыми решениями:

Наследование классов : внук, сын, отец
Создать базовый класс &quot;отец&quot; у которого есть фамилия, определить виртуальную функцию печати. Создать призводный класс &quot;ребенок&quot;,...

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

Реализовать программу, в которой три процесса: Отец, сын и внук
Здравствуйте! Помогите пожалуйста, уже мучаюсь целых 2 дня!!! необходимо реализовать программу, в которой три процесса: Отец, сын и внук....

1
6 / 6 / 1
Регистрация: 03.01.2015
Сообщений: 30
06.06.2015, 23:54  [ТС]
Получилось написать. Код тут выложить не смогу, т.к. не могу синхронизнуть виртуалку с родителем.

Как вывести дерево процессов, чтобы увидеть их id и т.д. Задерживаю все процессы на 7 сек (sleep), и вызываю ps fax через system();

Создание 2 детей делал через if(X==0){} и сразу же else if(X==0). Создается 2 ребенка. Отец получается на выходе else.

Как то так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2015, 23:54
Помогаю со студенческими работами здесь

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

Построить дерево родственников по мужской линии (дядя, отец, сын, брат)
Написать код в визуал пролог 5.2 или 7.3. Задача - дерево родственников по мужской линии (дядя, отец, сын, брат), и все родственники должны...

Создание новых процессов, запуск внешних программ fork(), system
Задача запустить внешнее приложение и получить его ID, для того чтобы в дальнейшем отследить живо оно или нет. Почему-то получаю _всегда_...

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

Необходимо выявить все пары отношений вида "отец-сын"; подсчитать кол-во найденных пар.
Здравствуйте! Помогите с задачей пожалуйста: Известна следующая совокупность фактов: Необходимо выявить все пары отношений вида...


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

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

Новые блоги и статьи
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru