Ich suche nach einer C-Funktion, die ein pgid (Prozessgruppen-ID) akzeptiert und gibt zurück, ob diese Prozessgruppe ausgeführt oder gestoppt wird.Eine Funktion, die eine PID akzeptiert und ihren Modus zurückgibt
Antwort
Der allgemeine Ansatz wäre, waitpid()
mit der WNOHANG
Option zu verwenden. waitpid(pid, &status, WNOHANG)
wartet auf einen unter pid
angegebenen untergeordneten Prozess oder Prozessgruppe, um den Status zu ändern.
Ohne die Option WNOHANG
blockiert die Funktion den aufrufenden Prozess, bis die Prozessgruppe den Status ändert. Einschließlich der Option wird sichergestellt, dass waitpid
mit einem Wert von 0
zurückgegeben wird, wenn noch keine Kinder den Status geändert haben. (Die Funktion gibt pid
, wenn der Zustand geändert hat.) Sie können für verschiedene Zustandsänderungen überprüfen, wie Kündigung, ein Stoppsignal zu kontrollieren, ein Wiederaufnahmesignal zu kontrollieren usw.
pid_t pid, w;
int status;
/* A call to fork, perhaps
* (pid is set to child's)
*/
/* Parent can check for child's termination */
w = waitpid(pid, &status, WNOHANG);
if (w == -1)
handle_error("waitpid_error");
if (w == 0)
printf("child still running\n");
else
printf("child exited\n");
Beachten Sie, dass, wenn das Kind beendet, die Anruf an waitpid
erntet das Kind.
- 1. Gibt es eine Std-Funktion, die nur ihren Parameter zurückgibt?
- 2. Funktion, die eine Zeichenfolge zurückgibt
- 3. Eine Funktion, die ein Dataset zurückgibt
- 4. Funktion, die eine Funktion zurückgibt (Javascript)
- 5. Einheit testet eine Funktion, die eine Funktion zurückgibt
- 6. Ist es möglich, eine Funktion zu erstellen, die eine Tabelle als Parameter akzeptiert und eine Tabelle zurückgibt?
- 7. Makro in C, um eine Funktion aufzurufen, die Ganzzahl zurückgibt und dann eine Zeichenfolge zurückgibt
- 8. Eine Funktion schreiben, die eine Liste als Argument akzeptiert
- 9. Funktion zum Zurückgeben einer Funktion, die eine Funktion zurückgibt usw.
- 10. Gibt es eine Standardfunktion, die ein Diktat und eine Liste von Schlüsseln akzeptiert und die Liste der entsprechenden Werte zurückgibt?
- 11. Haskell-Funktion, die eine Liste nimmt und Tupel zurückgibt
- 12. C++/Gcc - Stack-Zerschlagung, wenn eine Funktion eine Struktur zurückgibt
- 13. Erstellen Sie eine SQL-Funktion, die eine Tabelle zurückgibt
- 14. Rückgabetyp der Funktion, die eine Std :: -Funktion zurückgibt
- 15. Wird eine Kopie erstellt, wenn Funktion eine data.table zurückgibt?
- 16. Wie erstelle ich eine Hilfsmethode, die unbekannte Klassen akzeptiert und das korrekte Objekt zurückgibt
- 17. Wie kann eine Funktion ihren Namen und Argumente in R
- 18. Wie mache ich eine Funktion, die den benutzerdefinierten Tabellentyp als Parameter akzeptiert und denselben in sql zurückgibt?
- 19. Warum "Foof (Bar());" Kann eine Deklaration einer Funktion sein, die den Typ Bar akzeptiert und den Typ Foo zurückgibt?
- 20. Erstellen Sie eine C-Funktion, die Parameter verschiedener Datentypen akzeptiert
- 21. Excel-VBA: Erstellen Sie eine Funktion, die mathematische Gleichung akzeptiert
- 22. PHP-Funktion, die eine JSON akzeptiert Array codiert
- 23. Wie deklariere ich eine Funktion, die ein Lambda akzeptiert?
- 24. Warum akzeptiert die Funktion std :: eine Referenz in der Signatur?
- 25. Wie schreibe ich eine JS-Funktion, die eine variable Anzahl von Parametern akzeptiert und "weiterleitet"?
- 26. Wie eine Funktion in postgresql erstellen, die Array von Parametern akzeptiert und gibt eine Tabelle
- 27. Eine Funktion, die nur bekannte Ausdrücke zur Kompilierzeit akzeptiert?
- 28. Halten von Funktionsaufrufsignaturen für eine Funktion, die eine Obermenge von Argumenten einer anderen Funktion akzeptiert
- 29. PHP: Funktion, die ein Geburtstagsdatum als Parameter akzeptiert und den Wochentag von diesem Jahr zurückgibt
- 30. Objective C-Funktion, die nicht eine Struktur zurückgibt Kompilieren
Aber das Problem mit dieser Idee ist, dass, wenn ich einen Prozess, den ich nicht sicher weiß, ob es Kinder hat oder nicht, die Verwendung von waitpid() und WNOHANG eines seiner Kinder beenden. Ich suche nach einer allgemeineren Lösung, die mir hilft, eine Antwort für jeden Prozess zu erhalten, ohne einen Teilprozess zu beenden. – CrazySynthax
Ich bin mir nicht ganz sicher, was genau du machen willst. 'waitpid' beeinflusst keines der Zielprozesse in irgendeiner Weise (es sei denn, sie haben sich selbst beendet), es erhält nur Informationen über sie. Ich habe ein wenig gesucht und Sie könnten in '/ proc' schauen, wenn Sie auf einem Linux-System sind und nach möglichen Alternativen suchen. –