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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess, убить сторонний процесс зная его краткое имя  (Прочитано 9570 раз)
G-virus
Гость
« : Декабрь 29, 2009, 18:59 »

Привет. Подскажите, как убить процесс с помощью QProcess. Пример: на компьютере запущены firefox.exe и opera.exe. А при срабатывании определенного алгоритма, эти процессы бы завершались(просто запустил программу свою, а она убила бы эти процессы) Как такой алгоритм выглядит? И желательно какой-нибудь самый простой, для понимания.  Улыбающийся Спасибо
Записан
niXman
Гость
« Ответ #1 : Декабрь 29, 2009, 19:18 »

Цитировать
как убить процесс с помощью QProcess
Чужой процесс - никак.

Я же тебе дал ссылку на функции. Или ты ждешь чтоб за тебя это кто-то написал?
Записан
niXman
Гость
« Ответ #2 : Декабрь 29, 2009, 19:19 »

Пожалуйста, не заводи четвертую тему Подмигивающий
Записан
G-virus
Гость
« Ответ #3 : Декабрь 29, 2009, 19:26 »

Цитировать
как убить процесс с помощью QProcess
Чужой процесс - никак.

Я же тебе дал ссылку на функции. Или ты ждешь чтоб за тебя это кто-то написал?

Это для .NET Framework и VS 2008. А мне надо QProcess  Улыбающийся
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #4 : Декабрь 29, 2009, 19:35 »

Привет. Подскажите, как убить процесс с помощью QProcess. Пример: на компьютере запущены firefox.exe и opera.exe. А при срабатывании определенного алгоритма, эти процессы бы завершались(просто запустил программу свою, а она убила бы эти процессы) Как такой алгоритм выглядит?
Как алгоритм выглядит - это пофиг. но за такое действо я бы отрывал фаберже. нелояльно к пользователю сие действо. просто попроси закрыть апликуху.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Dendy
Гость
« Ответ #5 : Декабрь 29, 2009, 19:42 »

В Линуксе так делать можно - закрывать сессию программы, при этом программа не имеет права возразить и что-то спросить у пользователя. Все сохранения текущих данных - на усмотрение программы. В Qt почитать про это можно в статье "Session Management". Вот только как отправить такое событие другой программе - не подскажу.
Записан
G-virus
Гость
« Ответ #6 : Декабрь 29, 2009, 19:45 »

В Линуксе так делать можно - закрывать сессию программы, при этом программа не имеет права возразить и что-то спросить у пользователя. Все сохранения текущих данных - на усмотрение программы. В Qt почитать про это можно в статье "Session Management". Вот только как отправить такое событие другой программе - не подскажу.

Спасибо, полистаю)
Записан
niXman
Гость
« Ответ #7 : Декабрь 29, 2009, 21:00 »

Цитировать
Это для .NET Framework и VS 2008
не хочу сказать гадость, но по ссылке что я дал, декларация WinAPI функции. Какое она имеет отношение к NET Framework, известно, разве что космосу(вам то точно это не известно) Подмигивающий

Цитировать
А мне надо QProcess
мне тоже хочется чтоб весь POSIX был реентерабельным! но почему-то, ради меня, этого никто не делает. как вариант, написать троллям, и попросить их. может ради тебя они выпустят что-то вроди qt-4.6.0-src-G-virus-edition.tar.bz2. Попробуй, мало ли.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Декабрь 29, 2009, 21:11 »

В Линуксе так делать можно - закрывать сессию программы, при этом программа не имеет права возразить и что-то спросить у пользователя. Все сохранения текущих данных - на усмотрение программы. В Qt почитать про это можно в статье "Session Management". Вот только как отправить такое событие другой программе - не подскажу.
На Mac платформе: KillProcess() (с большой буквы, нативная ф-ция)- "цивилизованный" путь, процессу посылается событие quit. Если не понимает - через SIGKILL сигнал. Так делает Qt (terminateProcess/killProcess).

Хотя не пойму откуда такое желание мочить всех направо и налево?  Улыбающийся
Записан
G-virus
Гость
« Ответ #9 : Декабрь 30, 2009, 13:23 »

Цитировать
Это для .NET Framework и VS 2008
не хочу сказать гадость, но по ссылке что я дал, декларация WinAPI функции. Какое она имеет отношение к NET Framework, известно, разве что космосу(вам то точно это не известно) Подмигивающий

Цитировать
А мне надо QProcess
мне тоже хочется чтоб весь POSIX был реентерабельным! но почему-то, ради меня, этого никто не делает. как вариант, написать троллям, и попросить их. может ради тебя они выпустят что-то вроди qt-4.6.0-src-G-virus-edition.tar.bz2. Попробуй, мало ли.


То что ты тут много выделываешься, мне особой погоды не сделает. Я спрашивал про QProcess, значит надо отвечать про QProcess. Если нету такой функции именно в QProcess, значит так и сказать. в C++ я WinAPI пользоваться не умею (только в VB). А MSDN мне напоминает VS 2008 и .NET Framework, поэтому я так и подумал. А если ошибся, нехрен выделываться, ты тоже не с компьютером в руках родился!

И если кто-то что-то не знает - это не повод для иронии. Это форум, а не цирк. И создан он, чтобы люди получали ответы на свои вопросы. В основном это новички, такие как я. Так что не надо тут показывать, какой ты Ктулху. А я уже говорил - не с компом в зубах родился
« Последнее редактирование: Декабрь 30, 2009, 13:33 от G-virus » Записан
Pupil
Гость
« Ответ #10 : Апрель 27, 2011, 13:53 »

Код под Linux:

Код:
QStringList args1;
    QString procr1, procr2;
        args1 << "-c" << "ps -A | grep name";
        QProcess process1;
        process1.start( "sh", argsCr );
        if( !process1.waitForFinished() )
        {
                qDebug() << "Process launth error.";
        }

        QByteArray data1 = process1.readAll();
        QDataStream stream1(&data1, QIODevice::ReadOnly);
        stream1.setVersion(QDataStream::Qt_4_5);
        process1 = data1.data_ptr()->data;
        for (int i=1; procr1[i]!= ' '; i++)
            procr2[i-1] = procr1[i];

    process1.kill();   

    QStringList args;
    args << "-c" << "kill " + procr2;

    QProcess process2;
    process2.start( "sh", args );
    if( !process2.waitForFinished())
    {
        qDebug() << "Ошибка запуска процесса ";
    }


   process2.kill();
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Апрель 27, 2011, 14:05 »

2 Pupil:
а чем killall не подошел?
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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