Blick auf this post Ich verstehe nicht Kaylums Antwort. Ich habe zwei Fragen.Abrufen der Gesamtmenge der Prozesse von einem fork() Aufruf mit WEXITSTATUS
1) Er/Sie möchte die Variable "count" verwenden, um die Gesamtzahl der provozierten Prozesse (dh die Gesamtzahl der Kinder, Enkel usw. + Originalprozess) von einer Verzweigung zu zählen. Ich sehe, dass er beginnt, indem er im Elternprozess count auf 1 setzt, was Sinn macht (um den Eltern zu zählen), aber dann setzt er Count in den Kindern wieder auf 1. Warum macht das Sinn? Count ist bereits auf eins gesetzt und dies setzt die Anzahl nur noch einmal auf 1.
count += WEXITSTATUS(status);
2) Ich habe WEXITSTATUS untersucht, und von dem, was ich sammeln kann es den Exit-Status eines Prozesses durch den Ausgang zurück. Meine Frage ist, kann ich
exit(0)
oder
exit(1)
oder etwas anderes für sie arbeiten zu verwenden. Die Dokumentation dafür ist nicht klar. Mit anderen Worten, um es als Kaylum des
Vollcodesegment hier für Bequemlichkeit zu arbeiten:
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void)
{
pid_t before_pid, after_pid;
pid_t forked_pid;
int count;
int i;
int status;
before_pid = getpid();
count = 1; /* count self */
for (i = 0; i < 3; i++) {
forked_pid = fork();
if (forked_pid > 0) {
waitpid(forked_pid, &status, 0);
/* parent process - count child and descendents */
count += WEXITSTATUS(status);
} else {
/* Child process - init with self count */
count = 1;
}
}
after_pid = getpid();
if (after_pid == before_pid) {
printf("%d processes created\n", count);
}
return (count);
}
Kaylums Lösung sollte funktionieren, aber es ist auf 255 in der Zählung begrenzt: Der maximale Wert des Exit-Codes ist 255. – benjarobin
Vielen Dank. Ich hab es jetzt. Ich weiß, dass es auf 255 begrenzt ist, was in Ordnung ist. Ich schätze den Input. – EFiore