Убить процесс, не зная полного пути, используя Qt - PullRequest
1 голос
/ 12 апреля 2010

Я пытаюсь получить активные процессы на моем компьютере и найти определенный, если он существует, тогда я должен его убить. Возможно ли сделать это, не зная конкретного пути выполнения? Я знаю имя процесса выполнения, но не полный путь.

Итак, вкратце:

  1. Получить все активные процессы.
  2. Убить конкретный процесс.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 13 апреля 2010

Как было сказано, вы можете сделать это для Windows относительно просто, используя win api: Перечисление всех процессов && Завершение процесса

для linux вы можете попробовать запустить что-то вроде "ps -A", используя QProcess и проанализировать его стандартный вывод; что-то вроде этого:

QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
process.start("ps",  QStringList() << "-A");
if (!process.waitForStarted())
    return;
if (!process.waitForFinished())
    return;

//qDebug() << process.readAll();    
QByteArray output = process.readLine().trimmed();
while (!output.isEmpty())
{
    qDebug() << output;
    QList<QByteArray> items = output.split(' ');
    qDebug() << "pid:" << items.first() << " cmd:" << items.last();
    qDebug() << "===============================================";
    output = process.readLine().trimmed();
}

это должно вернуть список запущенных процессов, вы можете попробовать разные параметры командной строки для ps , чтобы получить нужные вам данные. Я полагаю, что убить процесс можно так же; запустив kill [pid]

надеюсь, что это даст вам представление о том, как действовать,

0 голосов
/ 15 апреля 2010

Если вы используете MacOS или BSD, вы можете перечислить все процессы, используя sysctl API .

В Linux, кажется, лучшее, что вы можете сделать, это посмотреть, как это делается в исходном коде для ps , который в основном предназначен для навигации по файловой системе /proc .

0 голосов
/ 12 апреля 2010

AFAIK Не существует специфичного для Qt способа делать то, что вы хотите, поэтому вам нужно использовать API-интерфейс собственной платформы. Какая платформа (Widnows, Unix, MacOS) вас интересует?

EDIT: Взгляните на справочник функций процесса MSDN: http://msdn.microsoft.com/en-us/library/ms684847(v=VS.85).aspx, особенно EnumProcesses, OpenProcess и TerminateProcess. Я не буду давать вам фрагменты кода, поскольку я сам не использовал этот API (я просто добавил его в закладки).

...