Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
3 / 3 / 8
Регистрация: 31.01.2016
Сообщений: 129
1

Убить все процессы, fork()

22.05.2017, 01:17. Показов 6673. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понять как убить все процессы после того как условие в if становится истинным

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
//start child processes
    //int status = 0;
    for (int i = 0; i < process_count; i++) {
        pid = fork();
 
        if (pid == 0 && string[i+1] != NULL) {//child proc
            printf("child process id: %d \t working from %s - %s \n",getpid(), string[i], string[i+1]);//
            pass = brute(t, string[i], string[i+1]);
            //child process found pass
            if (pass) {
                printf("child %d found pass: %s\n", getpid(), pass);
                //status = 1;
                //kill all child processes <---------------
                //break;
            }
        }
        else if (pid > 0) {//parent proc
            //printf("parent process id: %d\n",getppid());
            // wait(&status);
 
        }
        else {
            printf("Error forking\n");
            //exit(1);
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2017, 01:17
Ответы с готовыми решениями:

Убить все процессы
Здравствуйте, форумчане! Помогите, пожалуйста, начинающему. Представьте себе, что у вас есть файл....

Fork() процессы
Здравствуйте, Помогите please объяснить программу, что она выполняет (Linux) main() { int...

Способы убить зомби процессы
Вопрос в теме. 1 - waitpid(-1, &amp;status, 0); 2 - убить родителя Какие способы вы еще знаете?

Убить все процессы, кроме заданных
Нужно убить все процессы, кроме тех, что есть в списке (за исключением системных). Например, в...

3
190 / 150 / 61
Регистрация: 08.04.2010
Сообщений: 1,020
22.05.2017, 07:24 2
Используй сигналы
C
1
2
3
4
#include <sys/types.h>
#include <signal.h>
 
int kill(pid_t pid, int sig);
0
3 / 3 / 8
Регистрация: 31.01.2016
Сообщений: 129
22.05.2017, 21:21  [ТС] 3
Цитата Сообщение от Dovgon Посмотреть сообщение
Используй сигналы
То что ими нужно пользоваться я знаю.
Я хочу создать несколько процессов и что бы все они работали параллельно но когда для одного из них условие if будет истинно убить все процессы.

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
for (int i = 0; i < process_count; i++) {
 
        if ((pid[i] = fork()) == 0 && string[i+1] != NULL) {//child proc
            printf("child process id: %d \t working from %s - %s \n",getpid(), string[i], string[i+1]);//
            pass = brute(t, string[i], string[i+1]);
            //child process found pass
            if (pass) {
                printf("child %d found pass: %s\n", getpid(), pass);
                exit(0);
                //status = 1;
                //теперь УБИТЬ ВСЕ ПРОЦЕССЫ И ЗАКОНЧИТЬ ПРОГРАММУ
                //break;
            }
        }
        else if (pid[i] > 0) {//parent proc
            //printf("parent process id: %d\n",getppid());
            wait(NULL);//с этим процессы не работают параллельно а последовательно
 
            
            //??? kill(pid, SIGKILL);
                
        }
        else {
            printf("Error forking\n");
            //exit(1);
        }
    }
Добавлено через 30 минут
если wait(NULL); убрать то всё работает но процессы не завершаются
0
190 / 150 / 61
Регистрация: 08.04.2010
Сообщений: 1,020
23.05.2017, 08:26 4
Лучший ответ Сообщение было отмечено Dimitrij1 как решение

Решение

Вот так будет работать
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
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <vector>
 
#define NUM_PROCESSES 10
 
int main (int argc, char* argv[]){
    pid_t cpid;                          //Идентификатор созданного дочернего процесса.
    std::vector<pid_t> startedProcesses; //Массив идентификаторов все созданных дочерних процессов.
    for(int i = 0; i<NUM_PROCESSES; i++){
        cpid=fork();
        
        if(cpid==-1){                   //Если -1 то, создать дочерний процесс неудалось.
            perror("fork");
            exit(EXIT_FAILURE); 
        }
        if(cpid==0){                    //Если 0 то это ДОЧЕРНИЙ процесс.
            //Выполняемым необходимые операции в дочернем процессе
            ..
        }
        else{                          //если больше 0 то это родительский процесс и мы знаем идентификатор созданного дочернего процесса.
            startedProcesses.push_back(cpid);
        }
    }
    
    if(cpid==0){ //Если один из дочерних процессов завершен
        for(int i=0; i<NUM_PROCESSES; i++){
            int killresult=kill(startedProcesses[i], SIGKILL);
            if(killresult)
                std::cout<<"Failed to kill the process!"<<std::endl;
            else
                std::cout << "Killed the process!"<<std::endl;
        }
    }
    
    exit(EXIT_SUCCESS);
}
0
23.05.2017, 08:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2017, 08:26
Помогаю со студенческими работами здесь

Убить все процессы, кроме системных
Нужен код: 1. Добавляю таймер, ставлю период времени 60 секунд. 2. По прохождение 60 секунд есть...

Убить все процессы кроме указанных (системных)
например есть лист: List&lt;string&gt; name = new List&lt;string&gt;{&quot;svchost&quot;, &quot;csrss&quot;, &quot;System&quot;,...

Как убить все процессы, кроме системных
Доброго времени суток. Мне нужна помощь, дело в том, что я делаю программу, которая борится против...

Убить все процессы EXCEL.EXE в диспетчере задач
На событии кнопки есть код который по идеи должен закрывать приложение Excel но он выдает ошибку....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru