[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux_var] Bash e script in background



Il Wednesday 11 June 2008 08:07:53 Fox ha scritto:
> Ciao!
>
>[...]
> Ora, venendo al dunque, mi chiedevo, come si puo' fare per lanciare un
> processo all'avvio del desktop che rimanga in background e quindi
> nascosto che pero' comunichi con il "suo" processo ?
> L'articolo di L&c propone una cosa del genere:
>
> if [ "x$1" != "x--" ]; then
>     $0 -- &
>     exit 0
> fi
>
> Loro dicono che lanciato senza parameteri lo script rilancia un nuovo
> processo di se in background $0 -- &
>
> Personalmente a causa della mia scarsa conoscenza di bash ho fatto un po
> fatica a capire sto passaggio, e a dire il vero non sono ancora sicuro
> se devo interpretare x$1 come x valore per il valore passato al lancio
> dello script $1 (e ancora, x-- e' x -1 ?)

La riga
    if [ "x$1" != "x--" ]; then
la puoi interpretare semplicemente come:
    if [ "$1" != "--" ]; then
cioè "se il primo parametro è diverso da --.
Quell' "x" davanti alla variabile serve per evitare problemi se la variabile
$1 è vuota in alcune shell (non ho idea di quali, con la bash funziona anche 
senza).

All'interno dell'if avvia di nuovo lo stesso script passandogli come 
parametro --, così al secondo avvio salta il corpo dell'if.

In pratica il primo processo dello script genera un secondo processo figlio 
dello stesso script e poi esce (exit 0); il secondo, visto che il processo 
padre è uscito, diventa figlio di init, ottenendo così il risultato di 
continuare a eseguire indipendentemente (nonostante venga chiuso il terminale 
o la bash da cui è stato lanciato)

> [...]
> Ora, secondo me non va proprio da signori...
> Consigli?
>
> Ipotizzando di volere una situazione aggiornata al minuto:
> devo tener conto che non posso chiudere il processo, perche' cosi
> facendo mi sparirebbe l'icona
> potrei creare uno script con all'interno un ciclo perpetuo schedulato

Ok,
Oppure, a seconda di quello che devi fare, invece che attendere un timeout 
(con sleep), puoi attendere un input (con read)... Per esempio con:
tail -f /var/log/syslog | while read R;
	do faiQlcConInput("$R");
done;

O qualche altro tipo di evento (un segnale inviato con kill, ...)

> (ma come ne esco?)

In che senso? Vuoi farlo uscire dopo un certo tempo? Come risposta a qualcosa?

> chiaramente devo anche pensare a non ammazzare la macchina, perche'
> potrei ad esempio lanciare 4 o 5 script simili...

Mmm... Non so cosa vuoi visualizzare, ma eseguire 4 o 5 "cose" al minuto non 
dovrebbe essere così pesante... O almeno non mi vengono in mente "cose" 
abbastanza pesanti da creare problemi ;-)

> :-D
>
> Ciao
> Fox
>
>

Ciao :)


 --
 Email.it, the professional e-mail, gratis per te: http://www.email.it/f

 Sponsor:
 VOGLIA DI VACANZE ?
* A Riccione i Family Hotels sono gli alberghi specializzati per le vacanze dei bambini
 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?midy83&d-6

-- 
Per cancellare l'iscrizione: <talking-unsubscribe at ml.linuxvar.it>
Archivi web e configurazione: http://ml.linuxvar.it/ml/