Autore Topic: Info su Process [RISOLTO]  (Letto 834 volte)

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Info su Process [RISOLTO]
« il: 05 Marzo 2010, 23:14:48 »
Ciao a tutti, avrei bisogno di un qualche info sull'oggetto Process.
Da quanto ho letto nella guida in linea di gambas, se richiamo un programma esterno tramite il comando shell o exec, viene generato un oggetto ti tipo process.
Mettiamo per esempio di eseguire questo codice:
Codice: [Seleziona]
PUBLIC hprocess as process

PUBLIC SUB Button1_Click()

  hprocess = SHELL "gedit"

END

PUBLIC SUB Button2_Click()

  hprocess.Close()

END

Con la SUB del button1 apro gedit, mentre con la sub del button2 vorrei chiudere gedit, ma questo non avviene.
Cosa sto sbagliando???
« Ultima modifica: 06 Marzo 2010, 09:35:51 da Berserker79 »

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Info su Process
« Risposta #1 il: 05 Marzo 2010, 23:19:17 »
Credo che tu debba usare il metodo Kill, non Close. Quindi
Codice: [Seleziona]
hProcess.Kill
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Info su Process
« Risposta #2 il: 06 Marzo 2010, 00:44:53 »
La sintassi corretta del processo dovrebbe essere

Codice: [Seleziona]
hprocess = SHELL "comando" AS "hprocess"

Fatto ciò puoi gestire hprocess...

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Info su Process
« Risposta #3 il: 06 Marzo 2010, 05:43:30 »
Un mio piccolo riassunto :)

Codice: [Seleziona]
PRIVATE hProc AS Process

PUBLIC SUB Button1_Click()

  'Scateno l'evento Read
  hProc = EXEC ["ps", "aux"] FOR READ AS "Proc"
  
  'Scateno l'evento Error
  hProc = EXEC ["cat", "/quaicos"] FOR READ AS "Proc"

END

PUBLIC SUB Button2_Click()

  '.State legge lo stato del processo

  IF hProc.State = hProc.Running THEN
    'se il processo è in esecuzione
  ELSE IF hProc.State = hProc.Stopped THEN
    'se il processo non è in esecuzione
  ELSE IF hProc.State = hProc.Crashed THEN
    'se il processo si è 'schiantato'
  ENDIF

  hProc.Kill() 'Chiude l'appicazione
  hProc.Close() 'Chiude lo stream
  'Mi è capitato di dover usare hProc = NULL per chiudere
  'l 'applicazione in quanto .Kill() non aveva avuto effetto.
 
END

PUBLIC SUB Proc_Read()
DIM s AS String

  'Lettura dell'output del terminale
  READ #LAST, s, -256
  PRINT s
  
  
END

PUBLIC SUB Proc_Kill()

  'Evento che si scatena alla chiusura del processo
  PRINT "Ho Chiuso il Processo"

END

PUBLIC SUB Proc_Error(Errore AS String)

  'Evento che si scatena ad un errore del processo
  PRINT Errore
  
END
« Ultima modifica: 06 Marzo 2010, 05:47:24 da milio »

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Info su Process
« Risposta #4 il: 06 Marzo 2010, 09:35:18 »
Grazie milio, con il codice da te suggerito funziona.
Cmq utilizzando il comando SHELL non sembra possibile gestire il processo.
Purtroppo dovrò rivedere tutto la parte di codice che si occupava si creare la stringa da far eseguire a SHELL
dato che dovrò usare EXEC. Ciao e grazie.
Codice: [Seleziona]
' Gambas class file
PRIVATE hprocess AS Process
PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

END

PUBLIC SUB Button1_Click()

  hprocess = EXEC ["gedit"]

END

PUBLIC SUB Button2_Click()
 
  hprocess.Close()
  hprocess.Kill()
END

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Info su Process
« Risposta #5 il: 06 Marzo 2010, 11:49:31 »
Grazie milio, con il codice da te suggerito funziona.
Cmq utilizzando il comando SHELL non sembra possibile gestire il processo.

Non è vero...io uso sempre SHELL e leggo i processi....

Il mio codice di prima era sbagliato perchè mi ero dimenticato una cosa...andavo a memoria...

Codice: [Seleziona]
hprocess = SHELL "comando" FOR READ AS "hprocess"

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Info su Process [RISOLTO]
« Risposta #6 il: 06 Marzo 2010, 12:01:52 »
si ma prova a killare un processo eseguito con SHELL...
Per gestire solo gli eventi funziona...

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Info su Process [RISOLTO]
« Risposta #7 il: 06 Marzo 2010, 12:04:53 »
Poi magari e' solo un bug che riscontro io su Gambas 2.18... Magari sull'ultima versione funziona...

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Info su Process [RISOLTO]
« Risposta #8 il: 07 Marzo 2010, 08:49:19 »
Io al momento uso l'ultima realise 2.20 e usando il comando SHELL non riuscivo a chiudere il processo, mentre con EXEC si.
Per quanto riguarda le altre funzioni (READ, WRITE, ecc..) magari lo SHELL và anche bene.
Cmq guardano la guida in linea di Gambas, leggo:

EXEC    Runs an external process.
SHELL    Runs an external command in a shell

Quindi i due comandi non sono equivalenti. Ciao.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Info su Process [RISOLTO]
« Risposta #9 il: 07 Marzo 2010, 11:42:37 »
Infatti non sono equivalenti.
(Mi avete anticipato sulla distinzione fra EXEC e SHELL :-P)
Visita il mio sito personale: http://www.leonardomiliani.com