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

Порождение процессов (fork) в цикле и их убийство (kill)

01.10.2020, 15:10. Показов 2082. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем привет. Прошу помочь с заданием.

Такая проблема: при "убийстве" ребенка/родителя, его предок считает, что тот еще жив, показывая его pid.
Необходимо исправить это, т.е. сообщить потомку, о том, что он мертв (убит)

За любую помощь буду признателен.


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
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
 
pid_t t[100]; int Nproc, Don;
void ala(int k)
{
    printf("%d, My children", getpid());
    for (int i=0; i<Nproc; i++)
        printf(" %d ,", t[i]);
     printf ("\b \n");
    for (int i=0; i<Nproc; i++)
    
         kill(t[i], SIGALRM);
}
void usr1(int k)
{
     for (int i=0; i<Nproc; i++)
     {
         kill(t[i], SIGUSR1);
     }
     for (int i=0; i<Nproc; i++)
     {
         wait (NULL);
      };
         exit(0);
     
}
void makeproc(int p)
{
     Nproc=p;
     for (int i=0; i<p; i++)
      {
           t[i]=fork();
           if (t[i]==0)
           {
               printf("I am the child %d, son of %d\n", getpid(),getpid());
               makeproc(p-1);
           }
       }
    if (getpid() !=Don) for (;;) sleep(1);
}
int main (int argc, char *argv[])
{
    int N; unsigned char k;
    signal(SIGALRM, ala);
    signal(SIGUSR1, usr1);
    signal(SIGUSR2, usr1);
    sscanf(argv[1], "%d", &N);
    Don=getpid();
    makeproc(N);
    printf("a don! %d\n",Don);
    for (;;)
    { k=getchar();
      switch(k)
       { 
           int trg;
           case 'p': kill(Don, SIGALRM); break;
           case 'k': scanf("%d", &trg);
                     kill (trg, SIGUSR1); break;
           case 'x': kill (Don, SIGUSR1);
           case 'n': scanf("%d", &trg);
           default:  putchar('?'); fflush(stdout);
        }
     }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2020, 15:10
Ответы с готовыми решениями:

Убийство процессов
Всем привет. Возник воппрос - как убивать процесс? Запускать-то Process.start а убивать как?

Порождение процессов
Проблема такая: при запуске программы почему-то печатает 4 раза строчку process level 0 begin Как такое возможно? Что происходит? ...

Убийство процессов с win32 api
Почему то перестал работать код через Process.Kill() метод. Перехожу на win, но не смог написать. Вот начало //В класс ...

5
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
01.10.2020, 17:54
В потомке перехватить SIGKILL и просигнализировать предку о том, что его убивают...

З.Ы. Не плохо было бы почитать само "задание", т.к. непонятно что подразумевается под "убийством", обычно это kill pid SUGKILL Но может препод хотел видеть и SIGTERM, SIGHUP и пр., которые могут привести к завершению процесса...
0
0 / 0 / 0
Регистрация: 09.02.2019
Сообщений: 3
01.10.2020, 23:42  [ТС]
Именно kill pid SIGKILL.
Только как это сделать, не знаю, код уже был изначально.
Был бы препод нормальный, этой темы бы не было.
0
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
19.10.2020, 23:00
C
1
2
3
#include <sys/wait.h>
....
wait(&status);
Тогда родитель будет ждать завершения потомка.
0
0 / 0 / 0
Регистрация: 09.02.2019
Сообщений: 3
03.11.2020, 15:13  [ТС]
Не могу понять куда вставить это. Выдаёт ошибку куда бы ни вставил.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,390
03.11.2020, 18:50
Так оно и без wait(&status) заканчивается крахом. Да и status нигде не объявлен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2020, 18:50
Помогаю со студенческими работами здесь

Убийство ВСЕХ процессов через консоль
Всем привет. Нужно убить все процессы через консоль с использование grep и awk.

Порождение двух процессов - чтения и записи файлов
Процесс 1 открывает файл и порождает потомка 2. Процесс 1 читает данные из файла, процесс 2 пишет данные в файл следующим образом: по ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru