Visualizzazione dei risultati da 1 a 9 su 9

Discussione: C - problema processi

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760

    C - problema processi

    codice:
    #include <sys/types.h>
     #include <unistd.h>
     #include <stdio.h>
     #include <stdlib.h>
    #include <signal.h>
    
     int main(void) {
    
    
    int i=0;int j=0;
      int pid=fork();
    if (pid == 0) { printf("\nfiglio %d" ,getpid());
    for(i=0;i<500000000;i++){
            if (i==30000) kill(getpid(),SIGKILL);
    	printf("\ni %d" ,i);}
    exit (0); 
    } 
    else {
    printf("\nPadre %d\n",getppid());
    for(j=0;j<500000;j++){
             if (j==300000) ........
    
    	printf("\ni %d" ,j);}
    exit (1); 
    } 
    
    }
    Vorrei nel processo padre,dopo aver "killerizzato" il figlio far sospendere il processo a 300000 e farlo riprendere o,dopo 10 secondi o con Ctrl-C.Come devo fare?
    Grazie in anticipo

  2. #2
    codice:
    #include <sys/types.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <signal.h>
    
    int main(void)
    {
     int i=0;int j=0;
     pid_t pid;
    
     printf("Main Process = %d, getpid());
     wait();
     
     if ((pid = fork)==0)
     { 
      printf("\nChild Process = %d" ,getpid());
    
      for(i=0;i<500000000;i++)
      {
       if (i==30000) 	
       printf("i = %d" ,i);   
      }
      exit(0);
     }
     i=30000;
     sleep(10);
     
     printf("Main Process = %d, getpid());
     for(i=i;i<500000000;i++)
      printf("i = %d\n", i);
    
     exit (0); 
     return 0; 
    }
    Non posto sicuro perche sono al lavoro e sono su un Win.. ma piu o meno cosi dovrebbe essere quello che tu hai chiesto..
    Se non va bene te lo correggerò

  3. #3

    RE

    L'esercizio che ti ho postato aveva 2 erroretti...

    questa è la versione corretta:

    codice:
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(void)
    {
     int i=0;
     pid_t pid;
    
     printf("# Main Process = %d\n", getpid());
     wait();
     
     if ((pid = fork())==0)
     {  
      printf("\n# Child Process = %d\n" ,getpid());
    
      for(i=0;i<50000;i++)
      {
       printf("i = %d\n" ,i);  
       if (i==30000)
       break;	
      }  
      exit(0);
     }
     i=30000;
     sleep(3); /*Ho messo 3 secondi perchè 10 è un po una noia*/
     printf("\n# Main Process = %d\n\n", getpid());
     for(i=i;i<=50000;i++)
      printf("i = %d\n", i);
    
     exit (0); 
     return 0; 
    }
    Comunque la funzione per mettere un processo in sleeping è la funzione sleep(int secondi);
    Vedi un po se è piu o meno quello che vuoi fare tu, ovviamente la mia è un po semplice, sono le 9 e nn ho molto tempo.. fammi sapere... ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    grazie simo_us,sei stato molto gentile,se volessi però farlo ripartire con Ctrl-c come devo fare?

  5. #5

    RE

    Il comando Control-C è un segnale per terminare un processo, non per farlo partire... Ci sono delle situazioni particolari per terminare un ciclo con Control-c, ma attualmente non mi ricordo bene quali... Di solito poi con control-c termini proprio il programma... Detto in parole povere è un segnale o una chiamata particolare di sistema... Credo un segnale...

    Andava bene il mio semplice esempio?
    Se hai altre domande chiedi pure

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    grazie,ma in generale il mio problema è sospendere da tastiera e poi riprendere da tastiera un processo,come posso fare?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Sospendere un processo da tastiera è possibile con ctrl+Z che invia il segnale SIGSTOP al processo, ma non mi pare sia possibile riprenderlo con un'altra combinazione di tasti. Piuttosto, se hai necessità di farlo da tastiera, puoi aprire un'altra scheda della shell e inviare al processo il segnale SIGCONT, con qualcosa tipo

    kill -SIGCONT `pgrep nome_processo`

    o simili.
    every day above ground is a good one

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    ma così è corretto?

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    scusa,ho sbagliato risposta,puoi dirmi meglio?

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.