Prozesserzeugung



  • Ich habe ein programm welches ein kind und einen elter erstellt...

    eine kettenreaktion von prozessen..

    die kinderprozesse erzeugen weitere kinder und diese wiederum welche usw.. ( die anzahl der kinder soll per kommandozeile übergeben werden. )

    nun hab ich das auch hinbekommen, allerdings ist die ausgabe der kinder sehr sehr durcheinander und MITTEN in der ausgabe erscheint das shell prompt...

    nun ist meine frage:

    Warum ist die ausgabe so wust und warum ist das prompt da mittendrin???

    #include <sys/types.h>
    #include <unistd.h> 
    #include <stdio.h>
    #include <stdlib.h>
    
    int 
    main(int argc, char *argv[])
    {
    
    	int digit;
    	pid_t cpid;
    
    	printf("mein argv: %s\n",argv[1]);
    
    	digit = atoi(argv[1]);
    	printf("Digit : %d\n", digit);
    	fflush(stdout);
    
    	printf("Before the fork\n");
    	fflush(stdout);
    
    	int i;
    
    	for (i=0;i<digit;i++){	
    	if((cpid = fork()) == 0) {	
    	printf("\n\nI'm the child with the pid %d and my parent has ppid: %d\nfork() told me %d.\n" ,getpid(),getppid(),cpid);
    	fflush(stdout);	
    
    	} else if (cpid > 0){
    	printf("I'm the parent.I've got a child with id %d. My own Id is %d\n",cpid, getpid());
    	fflush(stdout);	
    	exit(0);
    	} else {
    	perror("In fork():");
    	}
    
    }
    	exit(0);
    
    }
    


  • Naja. Die Prozesse schreiben direkt auf das Terminal, und alles kommt in der Reihenfolge an, in der es aufgetragen wurde. Scheinbar schneller, als deine Shell den Prompt anzeigt.

    Übrigens geht's da um Unix-Programmierung, du hättest also im Linux/Unix-Forum größere Chancen auf kompetende Antworten.



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Falls es dich noch interessiert: Der Prompt kommt mittendrin, weil er nach der Beendignung des erste Elternprozesses (also der den und selber startest und nicht die Programme) kommt! Die Ausgabe ist so durcheinander, weil jeder Prozess gleichberechtigt ist, und nicht wie man vll. voreilig annehmen könnte, das der Elternprozess die höhere Priorität hat!



  • Wie kann man diese Priorietaet aendern, und beeinflusst das auch die Reihenfolge in der die Prozesse bei einem Shutdown beendet werden?





  • nice() & co wirken nur auf »echte« Prozesse und nicht auf (p)threads? IMO hat ein (p)thread ja eine eigenene pid, funktioniert nice() mit dieser auch?


Anmelden zum Antworten