Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] Creazione n processi a distanza di tempo

    Ciao, devo scrivere un programma tale che il processo padre crea N processi figli a distanza di tempo casuale compreso tra 1 e 5 secondi. Ogni processo figlio inoltre deve fare una exec. Non so come farlo, so come creare N figli e come fare la exec ma come faccio a dirgli di crearli ogni tot secondi compresi tra 1 e 5 secondi?


    Mi sono bloccato qui..
    codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <string.h>
    #include <sys/wait.h>
    
    #define N 10;
    
    int main(int argc, char* arcv[]) {
    	
    	pid_t pid_child;
    	int i;
    	
    	if(argc > 1) {
    		perror("argc");
    		exit(EXIT_FAILURE);	
    	}
    	
    	for(i = 0; i < N; i++) {
    		switch(fork()) {
    			case -1:
    				perror("fork");
    				exit(EXIT_FAILURE);
    			case 0: //figlio
    				
    				exit(EXIT_SUCCESS);
    			default: //padre
    				break;
    		}	
    	}	
    }
    
    Grazie

  2. #2
    Dai un'occhiata alle funzioni srand, rand e sleep.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ok grazie allora poi me le guardo con calma..
    Come potrebbe essere strutturato il programma? Non ci riesco.. non capisco come faccio a dirgli "crea un processo, aspetta tot e creane un altro. ripeti questo finche' non hai creato N processi". Detto cosi' e' facile ma a scriverlo no..

    codice:
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <string.h>
    #include <sys/wait.h>
    
    #define N 10;
    
    int main(int argc, char* arcv[]) {
    	
    	pid_t pid_child;
    	int i;
    	int rd = rand(..); //suppongo che in rd ci sia un numero casuale tra 0 e 5. Dove inserisco questo numero? Nella sleep ma dove la metto la sleep? 
    
    	if(argc > 1) {
    		perror("argc");
    		exit(EXIT_FAILURE);	
    	}
    	
    	for(i = 0; i < N; i++) {
    		switch(fork()) {
    			case -1:
    				perror("fork");
    				exit(EXIT_FAILURE);
    			case 0: //figlio
    				exec(...);
    				exit(EXIT_SUCCESS);
    			default: //padre
    				break;
    		}	
    	}	
    }
    

  4. #4
    Scusa, ma non vedo dove stia il problema... La parte di creazione dei processi ce l'hai già lì pronta, manca solo la parte di attesa, per cui ti ho già riportato le funzioni che ti servono... Leggine la documentazione e vedrai che è una banalità usarle.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Originariamente inviato da MItaly
    Scusa, ma non vedo dove stia il problema... La parte di creazione dei processi ce l'hai già lì pronta, manca solo la parte di attesa, per cui ti ho già riportato le funzioni che ti servono... Leggine la documentazione e vedrai che è una banalità usarle.
    Appunto manca la parte di attesa.. Sara' una cosa banale ma non ci riesco, non capisco dove inserire
    codice:
    sleep[rd]
    , sicuramente va prima della fork, giusto?

  6. #6
    Prova a scrivere le operazioni da svolgere in pseudocodice o con un diagramma di flusso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    farei lo speudocodice come l'ho scritto sopra.. cioe':

    fai una fork finche' non hai creato N processi e creali ogni tot secondi.
    ogni figlio fa una exec e termina
    il padre aspetta che terminino tutti i figli e termina


    Vedi, non so proprio come sprimere quel "ogni tot secondi"..

  8. #8
    Quello non è pseudocodice, è una descrizione discorsiva dell'algoritmo; nello pseudocodice descrivi nel dettaglio i passaggi svolti dall'algoritmo senza preoccuparti della sintassi specifica di un linguaggio.
    Se consideriamo dello pseudocodice di questo genere:
    codice:
    ripeti N volte:
        crea nuovo processo (fork+exec)
    Cosa devi aggiungere per introdurre una pausa di un secondo tra una creazione e l'altra? Poi come lo modifichi per rendere la pausa di durata casuale?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Cosa devi aggiungere per introdurre una pausa di un secondo tra una creazione e l'altra?
    codice:
    ripeti N volte:
        crea nuovo processo (fork+exec) + sleep(1)

    Poi come lo modifichi per rendere la pausa di durata casuale?
    codice:
    ripeti N volte:
        crea nuovo processo (fork+exec) + sleep(rd)
    con rd = secondi casuali dati dalla rand..

    Potrebbe essere?

  10. #10
    Qualcuno mi aiuta?

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.