Differenze tra le versioni di "Attendere e verificare la chiusura di un programma gestito da Process"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
− | Possiamo considerare almeno cinque modalità di attesa e verifica della chiusura di un programma esterno aperto e gestito mediante "''Process''". | + | Possiamo considerare almeno cinque modalità di attesa e verifica della chiusura di un programma esterno aperto e gestito mediante "''Process'' ". |
Riga 123: | Riga 123: | ||
Dim cartella, comm As String | Dim cartella, comm As String | ||
− | |||
− | + | For Each cartella In Dir("/proc") | |
If Exist("/proc/" & cartella & "/comm") Then | If Exist("/proc/" & cartella & "/comm") Then | ||
Riga 141: | Riga 140: | ||
'''Public''' Sub Button2_Click() | '''Public''' Sub Button2_Click() | ||
− | + | pr.Kill | |
<FONT color=#006400>' ''Si attende la chiusura del processo:''</font> | <FONT color=#006400>' ''Si attende la chiusura del processo:''</font> | ||
− | + | Repeat | |
− | + | Wait 0.01 | |
− | + | Until Not Exist("/proc/" & pid) | |
<FONT color=#006400>' ''Questa riga, ovviamente, può essere scritta anche così:'' | <FONT color=#006400>' ''Questa riga, ovviamente, può essere scritta anche così:'' | ||
− | + | '''Until Exist("/proc/" & pid) = False'''</font> | |
Versione delle 10:15, 12 nov 2021
Possiamo considerare almeno cinque modalità di attesa e verifica della chiusura di un programma esterno aperto e gestito mediante "Process ".
Indice
- 1 Chiusura con Killall ed attesa con Wait
- 2 Chiusura e successiva verifica con ps aux | grep...
- 3 Chiusura e successiva verifica con Process.State
- 4 Chiusura e successiva verifica con la sollevazione di un evento "Process.Kill"
- 5 Chiusura e verifica dell'esistenza della cartella del processo in "/proc/"
- 6 Note:
Chiusura con Killall ed attesa con Wait
Private pr As Process Public Sub Form_Open() ' Lanciamo come esempio l'editor di testi "Gedit": pr = Exec ["gedit"] End Public Sub Button1_Click() ' Chiusura ed attesa della effettiva chiusura: Shell "killall gedit" Wait End
Chiusura e successiva verifica con ps aux | grep...
Private pr As Process Public Sub Form_Open() ' Lanciamo come esempio l'editor di testi "Gedit": pr = Exec ["gedit"] End Public Sub Button1_Click() Dim Risposta As String pr.kill Shell "ps aux | grep o.gambas" & " | grep -wv grep | wc -l" To Risposta |1| Print risposta ' Se il valore contenuto nella variabile "risposta" è uguale a zero, ' allora il programma si è chiuso. End
Chiusura e successiva verifica con Process.State
Private pr As Process Public Sub Form_Open() ' Lanciamo come esempio l'editor di testi "Gedit": pr = Exec ["gedit"] End Public Sub Button1_Click() pr.Kill ' Verifica della chiusura del programma: While pr.State = 1 Print "Chiusura programma in corso" Wend ' Se il valore di "pr.State" è uguale a zero, ' allora il programma si è chiuso: Print "Programma chiuso" End
Chiusura e successiva verifica con la sollevazione di un evento "Process.Kill"
Private pr As Process Public Sub Form_Open() ' Lanciamo come esempio l'editor di testi "Gedit": pr = Exec ["gedit"] As "processo" End ' Si solleverà un evento "_Kill()" alla chiusura del programma gestito da "Process": Public Sub processo_Kill() Print "Il processo è stato chiuso !" End
Chiusura e verifica dell'esistenza della cartella del processo in "/proc/"
Private pr As Process Private pid As String Public Sub Form_Open() pr = Shell "gedit" Me.Center End Public Sub Button1_Click() Dim cartella, comm As String For Each cartella In Dir("/proc") If Exist("/proc/" & cartella & "/comm") Then comm = File.Load("/proc/" & cartella & "/comm") If comm Like "gedit*" Then pid = cartella Endif Next End Public Sub Button2_Click() pr.Kill ' Si attende la chiusura del processo: Repeat Wait 0.01 Until Not Exist("/proc/" & pid) ' Questa riga, ovviamente, può essere scritta anche così: Until Exist("/proc/" & pid) = False Print "Il processo si è chiuso" End
Note:
[1] Questa soluzione è stata suggerita dall'Amministratore Leo72 del Forum del sito Gambas-it.org.