QProcess liefert falsche ProzessID

Alles rund um die Programmierung mit Qt
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

QProcess liefert falsche ProzessID

Beitrag von BartSimpson »

Hallo ich habe folgendes Problem:

Code: Alles auswählen

qint64 ID;
QStringList Liste;
Liste<<"eth0";
QProcess::startDetached("dhclient",Liste,&ID);
qDebug()<<ID;
Die ProzessID die ich von dem dhclient Prozess bekomme ist an der Stelle eine ganz andere als wenn ich mir diese per "ps ax" ausgeben lasse. Ich benötige diese aber später. Hat jemand eine Erklärung hierfür?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Diese Überladung kenn ich gar nicht :P
Hast du wahrscheinlich nur das WorkingDirectory vergessen.
Aus der Doku:
If the function is successful then *pid is set to the process identifier of the started process.
Kannst du dir mal den return ausgeben lassen?
Und zu Testzwecken dein ID korrekt mit 0 initialisieren, damit du siehst ob überhaupt ID gesetzt wird. Denn Defaultinitialisierung muss nicht "0" sein.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Das Workingdir ist einfach auf QString() gesetzt, da nicht benötig wird:))
der witz ist, man bekommt false zurück obwohl der Prozess gestartet worden ist.
Sehr merkwürdig.
scn
Beiträge: 4
Registriert: 14. September 2004 10:26
Wohnort: Isernhagen (Region Hannover)

Beitrag von scn »

Wird false zurückgeliefert, konnte das Programm nicht gestartet werden und dann wird auch ID nicht belegt. Den Wert den du ausliest ist ein zufälliger Wert, da du die Variable nicht initialisiert hast (siehe hierzu auch Anmerkung von franzf).

Ich vermute einen anderen Fehler. dhclient wird nur im WorkingDirectory gesucht, also bei dir wg. QString() im aktuellen Verzeichnis. Eine Suche über die PATH-Variable, wie in der Shell gibt es hier nicht. Gib also als Programm statt "dhclient" den vollständigen Pfad zum Programm also z.B. "/sbin/dhclient" an. Jetzt sollte startDetached auch true zurückliefern und dann auch die Process ID liefern.
Antworten