Autore Topic: application.daemon = TRUE  (Letto 1150 volte)

  • Visitatore
application.daemon = TRUE
« il: 11 Marzo 2009, 19:56:38 »
Qualcuno l'ha mai usato ?
Come faccio ad interagire con l'applicazione che sta in background ???
Non ho trovato niente googlando e la guida ....

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: application.daemon = TRUE
« Risposta #1 il: 11 Marzo 2009, 23:24:56 »
Da quel poco che leggo nella documentazione, l'impostazione crea una copia della tua applicazione che viene spedita in esecuzione in background. Questa, però, "taglia" i normali ponti di comunicazione, nel senso che, leggendo almeno dal wiki, non accetta più input né fornisce output.

Immagino perciò che non esista un modo per "dialogare" con essa: essa risponderà solo a particolari eventi programmati nel suo codice.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: application.daemon = TRUE
« Risposta #2 il: 12 Marzo 2009, 01:04:58 »
In teoria dovrebbe comportarsi con qualsiasi altro demone...
Con questo tipo di programmi, bisogna però fare attenzione a lasciare spazio a determinati tipi di intrusione, a livello di colloquio, o anche solo per terminarla; in caso contrario avrai un processo che come gli pare, e che l'unico modo di buttarlo giù è killarlo come per i processi impazziti.

Di norma, questo tipo di procedure, hanno lo scopo di intercettare qualcosa, o fare qualcos'altro, basato su determinate logiche. Tanto per fare un esempio, potrebbe attivare un servizio, se si presenta un evento particolare come, ad esempi, l'arrivo di segnali da parte di una porta seriale, piuttosto che un buffer da una porta specifica (es. http/8080).

Nella pratica, io uso spesso procedure feeder (in C++), che controllano l'arrivo di file in determinate directory, leggerli e inviarne i dati ad un'altro processo che li lavora.

Ma, per farla corta, comunque sarebbe cosa buona e giusta, permettere al demone di intercettare un segnale di sistema (es. -TERM), permettendo di terminare correttamente il processo, a prescindere da quello che deve, o stà facendo.

  • Visitatore
Re: application.daemon = TRUE
« Risposta #3 il: 12 Marzo 2009, 01:48:47 »
Capito, quindi secondo voi non è possibile creare un intrcettatore di tasti premuti per esempio ....

Io però dovrei fare una cosa ....
Da shell avvio un'applicazione .... se per caso è già stata lanciata un altra copia in precedenza devo far fare a quest'ultima (quella in background) determinate operazioni....  
E' che mi sfugge proprio come fare ... sempre se è possibile ... ho paura di no vero ?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: application.daemon = TRUE
« Risposta #4 il: 12 Marzo 2009, 02:11:41 »
Beh, come ti è stato detto, potresti "stimolare" l'applicazione con determinati trucchetti. Perché no, anche quello di creare un file in una particolare directory: la tua applicazione, quando lanciata, crea un file e controlla se già è presente in background. Se no, si trasforma in demone e cancella quel file. Al lancio successivo, la tua applicazione cosa fa? Ricrea il file e controlla se è già in esecuzione: siccome quest'ultima eventualità si verifica, prende e termina lì. Ma ha però creato il file "messaggio" per il tuo demone, che si "sveglia" dal letargo.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: application.daemon = TRUE
« Risposta #5 il: 12 Marzo 2009, 10:44:57 »
L'idea è buona; in effetti è quello che fanno tutti i programmi sotto unix, ovvero quello di creare dei file lock, in cui c'è memorizzato anche il pid del processo attivo.
L'unico inconveniente di questa logica, è che se accade qualcosa di brutto alla tua procedura (leggi crash), il lock rimane appeso, ed è necessario eliminare il file manualmente.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: application.daemon = TRUE
« Risposta #6 il: 12 Marzo 2009, 12:16:26 »
Beh, si potrebbe ad esempio infilare il file nella cartella /tmp di sistema ed impostare lo svuotamento di tale cartella al boot del sistema (come in genere è fatto in molte distribuzioni).
Oppure una specie di "flag" di letto: se al primo accesso il fyle è di 0 byte, il file non è stato mai aperto. Quando l'applicazione ne controlla la sua esistenza, ci scrive dentro anche 1 byte a caso. Così, se durante il periodo che intercorre dal controllo del file alla sua cancellazione, l'applicazione va in crash, al successivo riavvio il file contiene dei dati, ergo è stato già controllato e si può cancellare a priori.

Insomma, una soluzione si può sempre trovare.
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: application.daemon = TRUE
« Risposta #7 il: 12 Marzo 2009, 13:13:39 »
Io usavo per esempio xmms ... un player...
lo lanciavo da bash e partiva .... se lo ri-lanciavo con opzione "-n" la copia già in esecuzione passava al sucessivo mp3 in playlist , con "-s" stoppava  e così via .... utilissimo per utilizzare i tasti multimediali della keyboard ...

Voi volete dirmi che per un qualcosa di simile devo crearmi volta per volta un file con all'interno il comando e controllarlo ogni secondo ? non è gravoso per il sistema ? Oltretutto l'eventualità di comandarlo non è frequente ...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: application.daemon = TRUE
« Risposta #8 il: 12 Marzo 2009, 16:05:52 »
Se è un player, mi pare che un demone sia una cosa già di per sé gravosa per un compito così semplice.
Non basta allora un'applicazione nella systray, come ad esempio Sottofondo?
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: application.daemon = TRUE
« Risposta #9 il: 12 Marzo 2009, 16:18:14 »
Era il concetto di comandare tramite shell un'applicazione già in esecuzione che mi interessava .... il demone l'ho trovato per sbaglio ieri facendo "application." e mi si è accesa la curiosità ....
il player era solo per far un esempio di qualcosa già esistente funzionante come intendevo io ....