Russian Qt Forum

Qt => Общие вопросы => Тема начата: G-virus от Декабрь 29, 2009, 18:59



Название: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: G-virus от Декабрь 29, 2009, 18:59
Привет. Подскажите, как убить процесс с помощью QProcess. Пример: на компьютере запущены firefox.exe и opera.exe. А при срабатывании определенного алгоритма, эти процессы бы завершались(просто запустил программу свою, а она убила бы эти процессы) Как такой алгоритм выглядит? И желательно какой-нибудь самый простой, для понимания.  :) Спасибо


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: niXman от Декабрь 29, 2009, 19:18
Цитировать
как убить процесс с помощью QProcess
Чужой процесс - никак.

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


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: niXman от Декабрь 29, 2009, 19:19
Пожалуйста, не заводи четвертую тему ;)


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: G-virus от Декабрь 29, 2009, 19:26
Цитировать
как убить процесс с помощью QProcess
Чужой процесс - никак.

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

Это для .NET Framework и VS 2008. А мне надо QProcess  :)


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


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: Dendy от Декабрь 29, 2009, 19:42
В Линуксе так делать можно - закрывать сессию программы, при этом программа не имеет права возразить и что-то спросить у пользователя. Все сохранения текущих данных - на усмотрение программы. В Qt почитать про это можно в статье "Session Management". Вот только как отправить такое событие другой программе - не подскажу.


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

Спасибо, полистаю)


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: niXman от Декабрь 29, 2009, 21:00
Цитировать
Это для .NET Framework и VS 2008
не хочу сказать гадость, но по ссылке что я дал, декларация WinAPI функции. Какое она имеет отношение к NET Framework, известно, разве что космосу(вам то точно это не известно) ;)

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


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

Хотя не пойму откуда такое желание мочить всех направо и налево?  :)


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: G-virus от Декабрь 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, поэтому я так и подумал. А если ошибся, нехрен выделываться, ты тоже не с компьютером в руках родился!

И если кто-то что-то не знает - это не повод для иронии. Это форум, а не цирк. И создан он, чтобы люди получали ответы на свои вопросы. В основном это новички, такие как я. Так что не надо тут показывать, какой ты Ктулху. А я уже говорил - не с компом в зубах родился


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: Pupil от Апрель 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();


Название: Re: QProcess, убить сторонний процесс зная его краткое имя
Отправлено: GreatSnake от Апрель 27, 2011, 14:05
2 Pupil:
а чем killall не подошел?