Я запускаю программу A.c одновременно, скажем, 5 раз. Часть кода приведен ниже:Невозможно убить процессы, выполняющиеся одновременно
int main(int argc, char *argv[]){
char s = 0;
int i = 0;
pid_t procB_id = 0;
int retval = 0;
struct sigaction act;
ch = &c[0];
memset(c, 0, 50);
// open the file entered in the command-line for reading
fptr = fopen(argv[1], "r");
if(fptr == NULL){
printf("Error - input file could not be opened for reading!\n");
exit(EXIT_FAILURE);
}
// Write characters read by file pointer to an array
while((s=fgetc(fptr)) != EOF){
ch[i] = s;
i++;
}
printf("Length of text: %d\n",i);
sigemptyset(&act.sa_mask);
act.sa_flags = SA_SIGINFO;
act.sa_sigaction = handlerA;
if((sigaction(SIGRTMIN, &act, NULL)) != 0){
printf("Signal could not be registered!\n");
}
//get PID of daemon B to be able to send it a real-time signal, indicating that A has started
procB_id = getBprocessID();
printf("PROCESS ID OF B: %d\n", (int) procB_id);
//call sendSignal() method to send real-time signal to B
retval = sendBSignal(procB_id);
if(retval == 1){
while(n < 0){
//printf("BEFORE PAUSE\n");
pause();
}
//writeToFIFO(n);
if(writeToFIFO(n) == 1){
n = -1;
exit(EXIT_SUCCESS);
}
}
while (1);
}
Соответствующая часть кода действительно выход (EXIT_SUCCESS). Однако, когда я запускаю процесс A параллельно, выходит только 1 процесс, а не остальные. Остальные все еще работают. Я бег процесса параллельно с помощью следующего скрипта:
for ((i=1;i<=5;i++))
do
./A file.txt &
done
«file.txt» представляет собой файл, каждый процесс должен читать отдельно. Я хочу убить все 5 процессов, а не только один. Кто-нибудь знает, как я могу это сделать? Пожалуйста помоги. Я предполагаю, что мой код неправильный, но я не знаю, что делать здесь.
Что 'getBprocessID',' sendBSignal', 'writeToFIFO' делать? –
И почему бесконечный цикл 'while (1);' в конце? Вы потеряли блок do 'do {} while (1);' при копировании? –
На самом деле каждый процесс является клиентом, который считывает файл и записывает его на собственный FIFO. Затем запущенный сервер считывает FIFO и записывает его в другой файл. Что касается бесконечного цикла, я даже не думал, что это необходимо, но без него сервер не может отправить сигнал нескольким клиенту. – user3033194