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

Завершение родительского процесса раньше порожденного

18.12.2013, 20:36. Показов 3316. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть задачка, в которой процесс порождает новый процесс. При этом родительский должен завершиться раньше дочернего.
У меня есть код:
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
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
main()
{
    extern int errno;
    extern char* sys_errlist[];
    pid_t pid;
    int rv;
    switch(pid=fork()) {
        case -1:
            perror("fork"); /* произошла ошибка */
            exit(1); /*выход из родительского процесса*/
        case 0:
            printf(" CHILD: Это процесс-потомок!\n");
            printf(" CHILD: Мой PID -- %d\n", getpid());
            printf(" CHILD: PID моего родителя -- %d\n", getppid());
            waitpid(getppid(), NULL, 0);
            printf(" CHILD: PID моего родителя -- %d\n", getppid()); //ожидается, что после завершения родительского процесса, вызов getppid() станет = 1
            printf("Error: %d, sys_errlist: %s\n", errno, sys_errlist[errno]);
            printf(" CHILD: Выход!\n");
            exit(rv);
        default:
            printf("PARENT: Это процесс-родитель!\n");
            printf("PARENT: Мой PID -- %d\n", getpid());
            printf("PARENT: PID моего потомка %d\n",pid);
            printf("PARENT: Выход!\n");
            exit(rv);
    }
}
Но узнаю pid родительского процесса после якобы завершения его, и он не меняется. Насколько я понимаю, после завершения родительского процесса, pid дочернего должен быть равным 1.
Скорее всего неправильно использую waitpid, введь он завершает дочерний, а не родительский процесс. Но точно не знаю. Помогите пожалуйста разобраться.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2013, 20:36
Ответы с готовыми решениями:

Завершение родительского процесса до созданного ранее потомка
Каким образом это можно реализовать? wait и waitpid работают только для дочерних процессов, насколько понимаю. При &quot;осиротении&quot;...

Передача указателя из родительского процесса в дочерний
Здравствуйте! Стоит следующая задача. Есть процесс, который перехватывает пакеты из сети и сохраняет каждый пакет в структуру. Из этих...

Напечатать идентификаторы процессов – собственный и родительского процесса
Друзья, Выручайте, Помогите программки написать в ОС Linux в терминале Программа №1 Напишите программу, которая выполняет...

4
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
18.12.2013, 21:48
Вызывать waitpid не для дочерних процессов бессмысленно(не говоря уже о том, что она вообще ничего не завершает).
0
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 41
19.12.2013, 20:21  [ТС]
А если вместо
C
1
waitpid(getppid(), NULL, 0);
написать
C
1
 sleep(3)
, то можно быть уверенным что родительский процесс завершится раньше дочернего?
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
19.12.2013, 22:01
Ну, например, можно использовать ту же getppid().
0
deleted
177 / 50 / 5
Регистрация: 29.03.2013
Сообщений: 365
07.01.2014, 08:42
Цитата Сообщение от SIGSEGV Посмотреть сообщение
то можно быть уверенным что родительский процесс завершится раньше дочернего?
http://linux.die.net/man/2/prctl
PR_SET_PDEATHSIG (since Linux 2.1.57)
Set the parent process death signal of the calling process to arg2 (either a signal value in the range 1..maxsig, or 0 to clear). This is the signal that the calling process will get when its parent dies. This value is cleared for the child of a fork(2) and (since Linux 2.4.36 / 2.6.23) when executing a set-user-ID or set-group-ID binary.
PR_GET_PDEATHSIG (since Linux 2.3.15)
Return the current value of the parent process death signal, in the location pointed to by (int *) arg2.
придёт сигнал, getppidом проверишь, что пид бати=1, собственно это и будет гарантией того что первый батя сдох. Если нет доступа к исходникам бати то флаг PR_SET_CHILD_SUBREAPER нужен и как минимум три процесса создавать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2014, 08:42
Помогаю со студенческими работами здесь

Завершение процесса по таймеру
Есть условие: Cоздаю процесс и жду пока он завершится Если процесс выполняется больше чем время Time то убить его. Вопрос,...

Ожидание завершение процесса порожденного cmd.exe
Проблема такая. Запускаю cmd.exe c переназначенным вводом/выводом в анонимные каналы. С помощью CreateProcess (). Записываю в...

Завершение родительского процесса из дочернего
Всем доброго времени суток. Мне нужно из дочернего процесса закрыть родительский, но ничего не выходит. Вот исходник дочернего ...

Порождение нового процесса и запуск программы в рамках порожденного процесса
Цель работы. Изучение программных средств создания процессов, а также простейших способов обмена данными между процессами. Задание к...

Отладка порожденного процесса
Очень сильно не хватает эрудированности по этой теме. Делаю вот так: Пытаюсь запустить CreateProcess'ом процесс, процесс запускается,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru