Linux, waitpid, WNOHANG und zombies

Ich muss in der Lage sein:

  1. fork einen Prozess und machen es execvp (ich hab das)
  2. überprüfen Sie, ob der untergeordnete Prozess execvp erfolgreich war (weiß nicht wie)
  3. überprüfen Sie, ob der untergeordnete Prozess beendet (Probleme)

Ich bin Gabelung ein Prozess und ich habe keine Möglichkeit zu prüfen, ob die Kinder die execvp gearbeitet hat oder nicht. Wenn es fehlgeschlagen ist ich muss in der Lage sein zu wissen, dass es fehlgeschlagen ist. Derzeit bin ich mit

-1 != waitpid( pid, &status, WNOHANG )

Aber es scheint, dass, wenn die execv des pid-Prozess fehl, ist der waitpid nicht -1 zurück.

Wie könnte ich das überprüfen? Ich lese die waitpid-Mann-Seite, aber es ist nicht klar zu mir; vielleicht ist mein Englisch nicht gut genug ist.

EDIT: um zu klären:

Ich Baue mir mein eigenes terminal für ein Haus Arbeiten. Ich brauche, um die als Eingabe ein Kommando-string, sagen wir, "ls" und dann habe ich, um den Befehl auszuführen.

Nachdem das Kind die Gabeln, die das Kind fordert, execvp, um den Befehl auszuführen ( nachdem ich parse den string) und die Eltern brauchen, um zu überprüfen, ob es ein '&' am Ende des Befehls oder nicht.

wenn das Zeichen '&' ist nicht vorhanden am Ende des Befehls, dann die Eltern müssen für das Kind warten, um Sie auszuführen.

also muss ich wissen, wenn die execvp failed. Wenn es nicht gescheitert, dann die Eltern verwenden waitpid warten für das Kind, um es zu beenden die Ausführung. Wenn es fehlgeschlagen ist dann die Eltern nicht für das Kind warten.

  • am besten Frage-Titel überhaupt.
  • Es gibt ein paar Faktoren, die beeinflussen könnten Ihre Lösung hier: Was sind Sie execvping-Prozess in? Sie haben die Möglichkeit zu Bearbeiten? Ist es okay nicht zu wissen, ob die execvp failed bis das Kind verlässt? Wenn Sie eine detailliertere Problembeschreibung, wir könnten in der Lage sein, einen besseren Ratschlag geben.
  • Kann nicht senden Sie ein signal vom Kind zu den Eltern im Fall der besagten Fehler?
  • Ich bearbeitet meine post, Thank u!
  • In dieser situation, die Sie nicht wirklich brauchen, zu wissen, ob die execvp erfolgreich ist. Alles, was Sie tun müssen, ist zu entscheiden, ob die Verwendung WNOHANG für waitpid. Wenn es ein &, dann verwenden Sie es. Verwenden Sie andernfalls eine gewisse Struktur zu überwachen, die hintergrund-tasks.
  • Eigentlich, überprüfen Sie heraus die Antwort, die ich gab, stackoverflow.com/questions/12824848/... - es gibt eine ziemlich anständige bit-code-Lösungen.
  • danke! Aber jetzt hab ich ein anderes problem. Ich brauche zu implementieren, fg und bg ( Vordergrund und Hintergrund ) Arbeitsplätze. wenn ich einen Befehl auszuführen, ohne ein & am Ende, es ist ein Vordergrund-job und dafür ist der parent wartet für das Kind zu beenden. Ich muss in der Lage sein, um zurückzukehren die Ausführung für die Eltern, wenn SIGTSP signalisiert wird, in anderen Worten nach eine Strg+z gedrückt wird. gut, ich bin in der Lage zu stoppen den Vordergrund-Prozess, aber ich bin nicht in der Lage, um die Rückkehr der Ausführung an den Elternteil, und ich weiß nicht, warum. gibt es etwas, was ich tun muss ?
  • Das hängt von Ihrer Umsetzung und Ihrem system. Ich könnte in der Lage sein zu helfen, aber es scheint, wie eine "neue Frage" ist die Art von situation.
  • danke für deine Hilfe, ich habe eine neue Fragen :stackoverflow.com/questions/13485462/.... Danke!

InformationsquelleAutor m1o2 | 2012-11-20
Schreibe einen Kommentar