Russian Qt Forum

Qt => Общие вопросы => Тема начата: maks от Ноябрь 28, 2009, 01:31



Название: Как через QProcess отправить запущенному процессу SIGINT?
Отправлено: maks от Ноябрь 28, 2009, 01:31
Как можно через QProcess отправит процессу запущенному процессу в QProcess отправить сообщение SIGINT (Ctrl+C)? 


Название: Re: Как через QProcess отправить запущенному процессу SIGINT?
Отправлено: Alex Custov от Ноябрь 28, 2009, 02:15
это не сообщение, а сигнал, который отправляется через kill(2)


Название: Re: Как через QProcess отправить запущенному процессу SIGINT?
Отправлено: maks от Ноябрь 28, 2009, 03:02
А как его отправит не привязываясь к операционной системе используя средства Qt?


Название: Re: Как через QProcess отправить запущенному процессу SIGINT?
Отправлено: gmorgunov от Ноябрь 28, 2009, 05:16
Можно средствами Qt- void QPricess::kill() [slot]. Вот пример:
Код:
#include <QtGui>
#include <QProcess>

int main(int argc, char **argv){   
    QApplication app(argc, argv);
    QPushButton *button = new QPushButton("kill process while_1");
    button->show();
    QProcess  *process = new QProcess;
    process->start(QString("/home/mike/process_qt/while_1")); // полный путь
    QObject::connect(button, SIGNAL(clicked()), process, SLOT(kill()));
    return app.exec();
}
Соберите проект. А также откомпилируйте программку while_1.c(беконечный цикл): gcc while_1.c -o while_1
Код:
int main() {
    while (1) { }
}
Запустите основную программу, появится кнопка, откройте другой терминал и в Linux:   ps -e
Там будет процесс while_1. Нажмите кнопку, опять ps  -e  - его уже не будет.


Название: Re: Как через QProcess отправить запущенному процессу SIGINT?
Отправлено: Alex Custov от Ноябрь 28, 2009, 05:22
Можно средствами Qt- void QPricess::kill() [slot]. Вот пример:

QPricess::kill() посылает SIGKILL, а не SIGINT. kill(2) поддерживается даже в винде, думаю можно обойтись им.