Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] Processo nipote non killato

    Ciao a tutti, ho un problema con la gestione di un processo figlio e il figlio del figlio


    Descrizione:

    2 programmi scritti in c, il primo deve avere il ruolo di controllore, il secondo è lo script che esegue i comandi.

    Lo scopo del controllore è quello di verificare lo stato del programma 2 e nel caso ucciderlo.


    Soluzione:

    programma 1

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include </usr/include/signal.h>

    #define KEY (key_t) 7890
    #define PERMESSI 0666

    int main (int argc, char *argv[])
    {
    int PID,contatore;
    char Buffer[20];
    int shmidP,shmidF;
    char *amemP,*damemF;

    if (PID = fork()) // Processo padre
    {
    shmidP = shmget(KEY,sizeof(Buffer),IPC_CREAT|0666);
    amemP = (char *)shmat(shmidP,0,0);
    strcpy(Buffer,amemP);
    for (contatore = 0; (contatore <= 10)&&(strstr(Buffer,"Completo") == NULL);contatore++)
    {
    sleep(1);
    strcpy(Buffer,amemP);
    }
    if (strstr(Buffer,"Completo") == NULL) kill(PID,SIGTERM);
    shmctl(shmidP, IPC_RMID, NULL);
    }

    else // Processo figlio
    {
    shmidF = shmget(KEY,sizeof(Buffer),IPC_CREAT|0666);
    damemF = (char *)shmat(shmidF,0,0);
    strcpy(damemF,"Lanciato");
    execl("/main/devel/programma2","programma2",argv[1],argv[2],argv[3],NULL);
    strcpy(damemF,"Completo");
    shmctl(shmidF, IPC_RMID, NULL);
    exit(0);
    }

    }


    Ovviamente questo non funziona, o meglio , il processo padre non si accorge se il figlio esce correttamente ed attende lo stesso che scada il timeout per killare il figlio.
    (dovuto al fatto che execl si sotituisce al processo che lo invoca)

    Nel caso usi system() al posto di execl funziona tutto se non che restano dei processi stoppati con il nome programma2. Come posso rimuoverli ?

    Grazie
    in progress !!

  2. #2
    Ai provato con la funzione waitpid ?
    Puoi trovare qualche info qui

  3. #3
    non posso attendere che il figlio smetta di lavorare, anche perchè deve gestire proprio la situazione in cui il figlio (o meglio il nipote) resta bloccato.
    in progress !!

  4. #4
    Capisco...puoi comunque usare la waitpid in modalità non bloccante (WNOHANG) per vedere se un processo è terminato e quindi evitare di attendere il timeout in questo caso.
    Quanto hai processi stoppati con la system, proverei comunque ad usare la waitpid perchè credo siano degli zombi (non ne sono comunque sicuro perchè hai usato il termine "stoppati") e quindi è corretto che rimangano fino a quando non usi la wait/waitpid su di essi.


  5. #5
    risolto usando execl e spostando la scrittura in memoria condivisa nello script nipote.
    in progress !!

  6. #6

    Re: [C] Processo nipote non killato

    Originariamente inviato da nemod1
    Ciao a tutti, ho un problema con la gestione di un processo figlio e il figlio del figlio
    ....

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include </usr/include/signal.h>

    ......
    ciao, sono agli inizi della programmazione concorrente.... a prima di poterti aiutare.. devo risplvere un problema ben più grave:

    le librerie che ho quotato... dove si trovano???????


    grazie 1000!
    ricordate:
    "...un Vero Programmatore non ha paura di usare GOTO..."


  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Come ti ho detto nell'altro post, non puoi usare il forum in questo modo ...

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da oregon
    Come ti ho detto nell'altro post, non puoi usare il forum in questo modo ...
    Quoto e chiudo. MarkinoVP, leggi il Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.