Russian Qt Forum
Ноябрь 22, 2024, 10:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess::kill() не убивает дочерние процессы  (Прочитано 4270 раз)
Павелъ
Гость
« : Февраль 20, 2018, 15:31 »

Доброго времени суток.

Выполняю bash-скрипт в QProcess()

Код:
_proc->setProgram("/bin/bash");

    _proc->setArguments(QStringList() << "-c" << "nmap -sP " + _address + ".0/24 | grep -E -o \"[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$\" | awk -F \".\" '{ if(($4 > 0) && ($4 < 255)) print $0;}'");


При удалении элемента требуется сразу закрыть процесс. Самым быстрым способом является - kill.

Но, он убивает только /bin/bash, а nmap продолжает висеть пока не выполнится.

Почему так происходит? Если я открою какое-нибудь графическое приложение в терминале и закрою терминал, то графическое приложение тоже закрывается.

Что не так с killом в данном случае?

Пробовал и так:
Код:
    int PID = _proc->pid();


    qDebug() << "PID=" << _address << PID;

    if(PID)
    {       
        QProcess::startDetached("/bin/bash",QStringList() << "-c" << "kill " + QString::number(PID));
    }

Тоже ничего не работает.

Как удалить полностью процесс, запущенный в QProcess, чтобы и bash, и nmap, и grep, и awk удалились?

Можно killall сделать, но вдруг другая программа использует nmap, то тогда и он закроется.
Записан
Павелъ
Гость
« Ответ #1 : Февраль 20, 2018, 15:38 »



Почему так происходит? Если я открою какое-нибудь графическое приложение в терминале и закрою терминал, то графическое приложение тоже закрывается.



Не обратил внимание, что если убить bash, то графическое приложение не закрывается. Закрывается только при ЗАКРЫТИИ терминала.

Значит, при закрытии прописано какое-то правило, которое удаляет всех потомков.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #2 : Февраль 21, 2018, 09:25 »

https://stackoverflow.com/questions/392022/whats-the-best-way-to-send-a-signal-to-all-members-of-a-process-group
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.078 секунд. Запросов: 23.