Autore Topic: IF/ELSE e processi  (Letto 1085 volte)

Offline madnessmike

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
    • MadnessBlog
IF/ELSE e processi
« il: 11 Febbraio 2009, 18:39:12 »
Avrei bisogno di un (altro) piccolo aiuto.

In un programma che sto ottimizzando, sono intenzionato ad aggiungere una funzione che esegua una determinata operazione solo se un processo di nome X è in esecuzione. Si può fare?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: IF/ELSE e processi
« Risposta #1 il: 12 Febbraio 2009, 07:02:21 »
Un qualunque processo del sistema?
Io utilizzo questo codice che, premetto, NON è mio ma ho copia-e-incollato (mi pare) dalla mailing-list ufficiale:
Codice: [Seleziona]

PRIVATE FUNCTION Controllo() AS Boolean
DIM Esito AS String

  SHELL "ps aux | grep " & [i]nome_processo[/i] & " | grep -wv grep | wc -l" TO Esito
  RETURN IIf(Val(Risposta) > 1, TRUE, FALSE)
         
END

Se trova il processo il cui nome è nome_processo restituisce True, altrimenti restituisce False.

P.S.:
io lo uso con Application.Name & ".gambas" al posto di nome_processo per verificare che il mio programma non sia già lanciato.
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: IF/ELSE e processi
« Risposta #2 il: 12 Febbraio 2009, 10:20:14 »
Agganciandomi al post di leo : secondo voi è possibile,  nel caso in cui trovi la mia applicazione gambas già in esecuzione, lanciargli un comando tipo "applicazione.gambas -opzione" con application.args[] ?? come se fosse un demone ??

Offline madnessmike

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
    • MadnessBlog
Re: IF/ELSE e processi
« Risposta #3 il: 12 Febbraio 2009, 14:47:47 »
Bello quel codice, Leo, ma sembra un po' troppo incasinato sul comando shell. Io lo ho rivisto in questo modo, ricorrendo a pgrep, che è anche più semplice da usare:

Codice: [Seleziona]
PUBLIC FUNCTION ProcessoAttivo() AS Boolean
  DIM Esito AS String
  SHELL "pgrep ecomorph" TO Esito
  IF Esito = NULL
    RETURN FALSE
  ELSE
    RETURN TRUE
  ENDIF
END


Quando un processo non esiste (nel mio caso ecomorph), pgrep non fornisce alcun output provocando un false all'uscita della funzione.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: IF/ELSE e processi
« Risposta #4 il: 12 Febbraio 2009, 15:11:17 »
Esistevano diverse soluzioni postate sulla mailing-list. Quella che ho pubblicato io però funziona sempre e restitusce correttamente se è già presente in memoria un altro processo che si chiama come quello che esegue il test.
Con pgrep mi pare invece che non possa sapere questa informazione perché ottengo solo che gbr2 o gbx2 è in esecuzione, ma non il sorgente Gambas in esecuzione, o sbaglio?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline madnessmike

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
    • MadnessBlog
Re: IF/ELSE e processi
« Risposta #5 il: 12 Febbraio 2009, 16:11:33 »
Sì, mi sono accorto che con i programmi gambas pgrep non funziona, ma nel mio caso, la mia procedura basta e avanza. ;-)

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: IF/ELSE e processi
« Risposta #6 il: 12 Febbraio 2009, 18:09:42 »
Ciao.

Per completare le informazioni, per ottenere il pid dei programmi gambas, pgrep
necessita dell'opzione -f.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: IF/ELSE e processi
« Risposta #7 il: 14 Febbraio 2009, 19:08:30 »
Citazione

leo72 ha scritto:
Un qualunque processo del sistema?
Io utilizzo questo codice che, premetto, NON è mio ma ho copia-e-incollato (mi pare) dalla mailing-list ufficiale:
Codice: [Seleziona]

PRIVATE FUNCTION Controllo() AS Boolean
DIM Esito AS String

  SHELL "ps aux | grep " & [i]nome_processo[/i] & " | grep -wv grep | wc -l" TO Esito
  RETURN IIf(Val(Risposta) > 1, TRUE, FALSE)
         
END

Se trova il processo il cui nome è nome_processo restituisce True, altrimenti restituisce False.

P.S.:
io lo uso con Application.Name & ".gambas" al posto di nome_processo per verificare che il mio programma non sia già lanciato.


cosa va inseriro al posto di risposta tra parentesi?

  • Visitatore
Re: IF/ELSE e processi
« Risposta #8 il: 14 Febbraio 2009, 19:12:12 »
ovviamente esito !!!

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: IF/ELSE e processi
« Risposta #9 il: 14 Febbraio 2009, 23:25:19 »
Ops... ho fatto un po' di casino col copia-e-incolla :-P
Visita il mio sito personale: http://www.leonardomiliani.com