2016-06-23 12 views
-1

process.hppWaitpid Rückkehr -1, warum?

#define HPROCESS int 
class Process { 
    private: 
     int exitCode; 
     HPROCESS hProcess; 
    public: 
     static void waitEnd(Process* proc) { 
      int w = waitpid(proc->hProcess, &(proc->exitCode), 0); 
      Debug::debug(w); 
     } 
}; 

main.cpp

int main() { 
    Process* process = NULL; 
    while(!process) { 
     cout<<endl<<"Waiting for second process.\nPress any key"; 
     getchar(); 
     getchar(); 
     process = Process::takeExisting("process"); 
    } 
    Process::waitEnd(process); 
    cout<<endl<<"second process ended"; 
    cout<<endl<<endl; 
    return 0; 
} 

ich erwartet hatte: stop Haupt, für Prozess warten, weiter Haupt. Es wartet nicht auf den Prozess, waitpid gibt -1 zurück, warum?

+0

Sie sollten explizit sowieso auf Fehler überprüft werden. Bist du sicher, dass 'waitpid()' nicht -1 zurückgibt? Außerdem wird Ihre Funktion nicht das tun, was Sie erwarten: Prozess wird * durch Wert *, nicht * durch Verweis * übergeben, so dass die Änderungen an 'exitCode' nichts bewirken. – andlabs

+0

@andlabs Ich habe den Code korrigiert und nach -1 gesucht, du hattest Recht. – Nikita

+0

Dieser Code wird nicht einmal kompiliert. – melpomene

Antwort

1

Waitpid funktioniert nur mit untergeordneten Prozessen, die mit fork(), exec() gestartet wurden.

In diesem Fall wird errno Code 10 nach dem Aufruf sein, weil es ein Versuch war, waitpid auf anderen Prozess, nicht Kind zu verwenden.

BTW ist es nicht mein Problem lösen, aber es eine andere Frage: Linux WaitForSingleObject?