Я пытаюсь создать программу, которая создает до 4 дочерних процессов. Каждый ребенок будет использовать функцию поиска, чтобы найти определенное слово в нужном файле:Как отправить сигнал kill нескольким дочерним процессам в случае сбоя выполнения задачи?
поиска BOOL (полукокса * файл, символ * слова, внутр раздел)
PS: Вы можете игнорировать функция поиска и что это такое точно делать в качестве основного квеста здесь, чтобы отправить сигнал нескольким дочерним процессам с успехом определенного дочернего процесса.
Каждый дочерний процесс будет искать в определенном разделе файла. то есть файл с именем "Foo", что containts:
автомобиля
бар
дегтя
далеко
ребенок процессы ищет строку "бар".
Если дочерний процесс удается найти строку, она будет выходить со значением 0 (выхода (0)), в противном случае, если он закончил весь свой участок, не Sucess найти строку будет выйти со значением 1 (выход (1)).
Как только ребенок существует со значением 0 (преследуется при поиске строки). Родитель отправит сигнал уничтожения другим дочерним процессам.
Рассмотрим следующий код:
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
pid_t p;
p=fork();
int i;
int storage[4];
for(i=0;i<4;i++)
{
p=fork();
if(p==0)
{
storage[i]=getpid();
open("testfile.txt",O_WRONLY);
if(search("testfile.txt","bar",i))
{
storage[i]=1;
//exit(0);
}
else
//exit(1);
}
}
for(i=0;i<4;i++)
{
if(storage[i]!=1)
kill(stroage[i],SIGTERM);
}
}
То, что я сделал в этом коде используется массив из 4 чисел, он содержит идентификаторы дочерних процессов. Случай дочернего файла, который был успешно заменен, изменился на 1. Затем я отправил сигнал уничтожения другим процессам, кроме этого конкретного процесса.
Является ли код, который я написал правильно? Если да, то как использовать значения выхода для отправки сигнала без использования массива?
'storage' - объект с автоматическим хранением. Это, конечно, не разделяется между процессами, поэтому ваш подход абсолютно не работает. – EOF
@EOF Я думаю, что получаю это, у 4 дочерних процессов будет собственное поле памяти хранилища переменных, верно? Вот почему он не будет работать, поскольку родитель не будет иметь значений в переменной? Что делать, если я использую его как указатель? Это решит? – Amine
Указатель только разрешил бы это, если бы указал на память, которая разделена между процессами. В этом случае вам также необходимо обеспечить атомарность и порядок доступа к общей памяти. – EOF