Attendere e verificare la chiusura di un programma gestito da Process
Vai alla navigazione
Vai alla ricerca
Possiamo considerare almeno cinque modalità di attesa e verifica della chiusura di un programma esterno aperto e gestito mediante la Classe Process.
Chiusura e successiva verifica con "Process.State"
Private pr As Process
Public Sub Form_Open()
' Lancia come esempio l'editor di testi "Gedit":
pr = Exec ["gedit"]
End
Public Sub Button1_Click()
pr.Kill
' Compie questo ciclo di attesa, sinché il processo non è ancora chiuso:
While pr.State = Process.Running
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 dell'Evento "_Kill()" della Classe Process
Private pr As Process Public Sub Form_Open() ' Lancia 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()
' Lancia come esempio l'editor di testi "Gedit":
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 ultima riga, ovviamente, può essere scritta anche così:
' Until Exist("/proc" &/ pid) == False
Print "Il processo si è chiuso"
End
Chiusura con Killall ed attesa con Wait
Private pr As Process Public Sub Form_Open() ' Lancia 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() ' Lancia 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 [nota 1] Print risposta ' Se il valore della variabile "risposta" è uguale a zero, allora il programma si è chiuso. End
Note
[1] Questa soluzione è stata suggerita dall'Amministratore Leo72 del Forum del sito Gambas-it.org.