Terminare programma cpp sotto linux

di il
11 risposte

Terminare programma cpp sotto linux

Salve ragazzi, comincio dicendo che il programma è completo e gira correttamente senza alcun tipo di errore. Ora però sorge un nuovo piccolo problema:
una volta avviato il programma da terminale tramite il comando /.main come posso terminare in maniera sicura e corretta thread e main? Poichè sono quasi sicuro che i comandi kill e killall con i rispettivi "segnali" killino il programma in maniera anomala , brusca, lasciando quindi in sospeso i thread. Spero di essere stato chiaro, aspetto come sempre i vostri consigli .

11 Risposte

  • Re: Terminare programma cpp sotto linux

    Ti basta fare return dal main
    Se invece vuoi proprio chiudere il tuo programma da fuori potresti utilizzare qualche segnale scrivendone il relativo handler
  • Re: Terminare programma cpp sotto linux

    Grazie per la prontissima risposta, allora ho provato come detto con alcuni dei segnali presenti quando si digita kill -l ma il risultato è sempre lo stesso. Purtroppo per come ho pensato l'applicazione, cioè attraverso un'interfaccia grafica, devo chiudere necessariamente il programma da fuori e per farlo uso la funzione exec di Laravel. Hai altre idee?
  • Re: Terminare programma cpp sotto linux

    Non ho capito perché DEVI chiuderlo da fuori ...
  • Re: Terminare programma cpp sotto linux

    Attenzione che devi scrivere un handler per la chiusura corretta del tuo programma e che non puoi utilizzare il SIGKILL, per il quale mi sembra non ti venga data la possibilità di intervenire (l'handler non viene richiamato). Prova a scrivere l'handler ad esempio per il SIGTERM (15); per provare ti basterà dare kill -15 <pid>
  • Re: Terminare programma cpp sotto linux

    oregon ha scritto:


    Non ho capito perché DEVI chiuderlo da fuori ...
    Devo chiudere il main.cpp da fuori perchè lo ho implementano in un progetto Laravel con interfaccia grafica. Il motivo è stupido, ho voluto unire i due progetti per vedere se riuscivo a far scambiare dati, informazioni ecc, in realtà ho inserito anche un database ma per puro divertimento tutto qui , mi piace vedere se riuscivo a fare comunicare html - cpp - sqlite.

    candaluar ha scritto:


    Attenzione che devi scrivere un handler per la chiusura corretta del tuo programma e che non puoi utilizzare il SIGKILL, per il quale mi sembra non ti venga data la possibilità di intervenire (l'handler non viene richiamato). Prova a scrivere l'handler ad esempio per il SIGTERM (15); per provare ti basterà dare kill -15 <pid>
    Ora ci sto provando, appena posso ti farò sapere se ci sono riuscito o meno =) grazie ancora per il consiglio.
  • Re: Terminare programma cpp sotto linux

    Ancora non hai detto il perché "tecnico" ... non c'è un modo per "chiudere" il programma dall'interfaccia grafica (magari con un bottone)?
  • Re: Terminare programma cpp sotto linux

    Si scusa ho due bottoni stop e start:
    - il pulsante start invia un exec ./main
    - il pulsante stop invia un exec stop
    Però questo non mi convince perchè come ho detto non mi chiude correttamente il main e questo mi da molto fastidio. Ho provato a scrivere l'handler per il SIGINT:
    
    #include <iostream>
    #include <csignal>
    
    void signalHandler( int signum )
    {
    	std::cout << "SEGNALE DI INTERRUZIONE : " << signum <<std::endl;
    	exit(signum);  
    
    }
    
    int main ()
    {
        int i = 0;
        signal(SIGINT, signalHandler);
        while(++i){
           std::cout << "Going to sleep...." <<std::endl;
           if( i == 3 ){
              raise( SIGINT);
           }
        }
    	
    	std::cout<<"FINE"<<std::endl;
        return 0;
    }
    
    Il messaggio finale "FINE" non lo stampa . Cosa mi sfugge?
  • Re: Terminare programma cpp sotto linux

    Dal signalHandler attivi una variabile booleana e nel ciclo while esci se questa è attiva.
    Il raise non lo devi fare li ma dall'esterno con il comando kill...
  • Re: Terminare programma cpp sotto linux

    Lo so che chiedo molto ma potresti farmi un piccolo esempio ? E' da stamane che sono attaccato qui e sinceramente mi si è fuso il cervello
  • Re: Terminare programma cpp sotto linux

    Purtroppo non ho un ambiente per provare quello che affermo. Tuttavia posso consigliarti cercare con google, ci sono tantissimi esempi, come http://www.thegeekstuff.com/2012/03/catch-signals-sample-c-code/
  • Re: Terminare programma cpp sotto linux

    Grazie mille ^_^ e scusa il disturbo
Devi accedere o registrarti per scrivere nel forum
11 risposte