Russian Qt Forum

Qt => Общие вопросы => Тема начата: mega_m от Октябрь 01, 2007, 18:41



Название: QProcess Qt4 Linux
Отправлено: mega_m от Октябрь 01, 2007, 18:41
qint64 pid;
QProcess::startDetached(QString("myprog"), QStringList() << "yo" , QDir::homePath(), &pid);

Новый процесс стартует, но значение переменной pid меньше на 2 реального значения pid программы.
Как это понять ?

Может из-за "On Unix, the started process will run in its own session and act like a daemon." ?


Название: Re: QProcess Qt4 Linux
Отправлено: Dodge от Октябрь 05, 2007, 13:37
вопрос конечно интересный... в виндах все норм...


Название: Re: QProcess Qt4 Linux
Отправлено: Mixolap от Октябрь 06, 2007, 10:40
Процесс демонизации в Linux включает в себя два fork, отсюда реальный pid и на два больше.
Кстати, не факт что на два, если между форками еще процессы запускались, то будет больше чем два на количество других процессов.


Название: Re: QProcess Qt4 Linux
Отправлено: mega_m от Октябрь 07, 2007, 23:08
Mixolap. Вот реализация с помощью LinuxAPI

int status;
pid_t pid = fork();

if (pid > 0) {
   fprintf (f, "%i", pid);
   fclose (f);
   wait(&status);
} else {
   execlp("prog",....,NULL);
}

Так можно делать хоть до бесконечности. Это просто копия процесса.
pid прекрасно сохраняется и в дальнейшем по нему легко убить процесс.

Хочется кросс кода без #ifdef.