Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] Help segnali

  1. #1
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154

    [C] Help segnali

    Ciao a tutti,
    da ore ormai cerco di avere questa stampa:
    codice:
    1 - Processo figlio
    2 - Processo padre
    3 - Processo figlio
    4 - Processo padre
    5 - Processo figlio
    6 - Processo figlio
    dal seguente programma:
    codice:
    #include <errno.h>       /* error definitions and routines */
    #include <stdlib.h>      /* C standard library */
    #include <unistd.h>      /* unix standard library */
    #include <stdio.h>       /* standard I/O library */
    #include <string.h>      /* string functions */
    #include <sys/types.h>
    #include <sys/wait.h>
    #include </usr/include/signal.h>  /* funzioni per i segnali*/
    
    main (int argc, char *argv[])
    {
    	int i, status;
    	pid_t pid;
    
    	pid = fork ();
    
    	if (!pid)
    	{
    		printf ("1 - Processo figlio\n");
    		fflush (stdout);
    		kill (getpid(), SIGSTOP);
    		printf ("3 - Processo figlio\n");
    		fflush (stdout);
    		kill (getppid(), SIGCONT);
    		kill (getpid(), SIGSTOP);
    		printf ("5 - Processo figlio\n");
    		fflush (stdout);
    		printf ("6 - Processo figlio\n");
    		fflush (stdout);
    		exit(0);
    	} else
    	{
    		printf ("2 - Processo padre\n");
    		fflush (stdout);
    		kill (pid, SIGCONT);
    		kill (getpid(), SIGSTOP);
    		printf ("4 - Processo padre\n");
    		fflush (stdout);
    		kill (pid, SIGCONT);
    		wait(NULL);
    	}
    	return 0;
    }
    ma non riesco a venirne a capo. Potete aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    La stampa che vorresti tu non credo che debba per forza venir fuori. Dipende, in parte, dalla politica di schedulazione. Potrebbe, ad esempio, andare in esecuzione prima il padre cosicche' la prima stampa sia:

    "2 - Processo Padre" e non quella che ti attendevi...

    Se poi il processo padre facesse in tempo ad eseguire la kill(...) prima di essere deschedulato allora il SIGCONT verrebbe perduto cosicche' il figlio...

    Insomma, mi sembra che ci sia qualche assunzione di troppo...

  3. #3
    Non Ho Capito ???
    Io L'ho provato e risulta cosi':
    codice:
    1 - Processo figlio
    2 - Processo padre
    3 - Processo figlio
    4 - Processo padre
    5 - Processo figlio
    6 - Processo figlio
    Uso: anticipatory io scheduler

  4. #4
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Boh... a me inverte la riga 2 con la 3.
    Forse è davvero un problema di schedulazione. Per far stampare in corretta sequenza devo inserire (e non so perchè) nel padre un bel usleep (10);
    Grazie cmq per avermi dato conferma che "dovrebbe funzionare"
    Ciaux

  5. #5
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da _sys/sid
    Non Ho Capito ???
    Io L'ho provato e risulta cosi':
    codice:
    1 - Processo figlio
    2 - Processo padre
    3 - Processo figlio
    4 - Processo padre
    5 - Processo figlio
    6 - Processo figlio
    Uso: anticipatory io scheduler
    Non ho detto che non puo' succedere. Ho detto soltanto che non e' detto che succeda sempre. In poche parole c'e' una race condition (Secondo me).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.