Anfängerproblem, waitpid()



  • Guten Tag, ich versuche gerade eine Aufgabe zu lösen.
    Es geht im Prinzip darum einen Tee-Timer zu realisieren.

    Was das Programm können soll.

    Am anfang Solle das Programm nach der Ziehzeit (wie lange der Tee zum ziehen brauch) und nach dem Teenamen fragen und einlesen.
    Danach soll mit fork() ein Kindprozess erstellt werden der dann die angegebene Zeit arbwartet und dann druckt "Tee YX ist fertig". Der Hauptprozess soll weiter
    durch eine Schleife direkt wirde von vorne Beginnen damit mann mehrere Timer gleichzeitig starten kann.
    Als Zusatz soll beim Erschaffen der Vaterprozess die PID des erschaffenen Prozesses ausgeben und der Erschaffene Prozess seine eigene PID.

    Bis dahin habe ich auch alles zum laufen bekommen jetzt sollen noch mit waitpid()
    die Resourcen der durchgearbeiteten Kindprozesse wieder freigegeben werden.
    Daran happert es bei mir stark. Wenn ich wait benutze wird der Vaterprozess suspendiert bis der Kindprozess fertig ist wodurch dann keine gleichzeitigen Timer mehr möglich sind und wenn ich WNOHANG bei waitpid benutzte klappt es nicht.

    Hier mein Code

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    
    int main () {               
    	char * tname;   
    	tname = (char *) malloc(1000);   
    	int ziehzeit;   
    	int pid;
    
    	while (2>1) {
    		printf("Bitte Ziehzeit eingeben: \n");                        
    		scanf("%i", &ziehzeit);                              
    		printf("Bitte Teenamen eingeben: \n");            
    		scanf("%s",tname);
    		waitpid (-1, NULL,0);	
    		pid = fork();
    
    		if (pid > 0) {
    			printf("Prozess %d erschafft Prozess %d\n",getpid(),pid);		
    		}
    
    		else if (pid == 0) {
    			printf("Ich bin der neu erschaffene Prozess (%d)\n",getpid());
    			sleep(ziehzeit);
    			printf("%s ist fertig\n",tname);
    			exit(3);        
    		}
    	}   
    	return 0;
    }
    

    Ich würde Tips oder Lösungsansätze herzlich entgegen nehmen.



  • Das ist doch kein C#, dass ist QBasic!



  • Oh, das tut mir leid, ich merke gerade das ich meinen Beitrag im Falschen Forum geposted habe. Es sollte C und nicht C# sein. Ich werde
    das noch einmal ins richtige Forum schreiben, falls ein Moderator das also liest
    kann er diesen Beitrag gerne löschen/schließen.



  • FrEEzE2046 schrieb:

    Das ist doch kein C#, dass ist QBasic!

    Vorallem QBasic 😃 👍


Log in to reply