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'' ". | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Chiusura e successiva verifica con ''Process.State''== | ==Chiusura e successiva verifica con ''Process.State''== | ||
− | |||
Private pr As Process | Private pr As Process | ||
Riga 61: | Riga 7: | ||
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
− | <FONT color= | + | <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font> |
− | + | pr = Exec ["gedit"] | |
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button1_Click() | '''Public''' Sub Button1_Click() | ||
Riga 71: | Riga 16: | ||
pr.Kill | pr.Kill | ||
− | <FONT color= | + | <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font> |
While pr.State = 1 | While pr.State = 1 | ||
Print "Chiusura programma in corso" | Print "Chiusura programma in corso" | ||
Wend | Wend | ||
− | + | ||
− | <FONT color= | + | <FONT color=gray>' ''Se il valore di "pr.State" è uguale a zero, allora il programma si è chiuso:''</font> |
− | |||
Print "Programma chiuso" | Print "Programma chiuso" | ||
'''End''' | '''End''' | ||
− | |||
− | |||
==Chiusura e successiva verifica con la sollevazione di un evento "Process.Kill"== | ==Chiusura e successiva verifica con la sollevazione di un evento "Process.Kill"== | ||
− | |||
Private pr As Process | Private pr As Process | ||
Riga 91: | Riga 32: | ||
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
− | <FONT color= | + | <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font> |
− | + | pr = Exec ["gedit"] As "processo" | |
'''End''' | '''End''' | ||
− | <FONT color= | + | <FONT color=gray>' ''Si solleverà un evento "_Kill()" alla chiusura del programma gestito da "Process":''</font> |
'''Public''' Sub processo_Kill() | '''Public''' Sub processo_Kill() | ||
− | + | Print "Il processo è stato chiuso !" | |
'''End''' | '''End''' | ||
− | |||
− | |||
==Chiusura e verifica dell'esistenza della cartella del processo in "/proc/"== | ==Chiusura e verifica dell'esistenza della cartella del processo in "/proc/"== | ||
Riga 113: | Riga 52: | ||
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
+ | <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font> | ||
pr = Shell "gedit" | pr = Shell "gedit" | ||
Riga 118: | Riga 58: | ||
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button1_Click() | '''Public''' Sub Button1_Click() | ||
Riga 125: | Riga 64: | ||
For Each cartella In Dir("/proc") | For Each cartella In Dir("/proc") | ||
− | + | If Exist("/proc" &/ cartella &/ "comm") Then | |
− | If Exist("/proc | + | comm = File.Load("/proc" &/ cartella &/ "comm") |
− | comm = File.Load("/proc | + | If comm Like "gedit*" Then pid = cartella |
− | |||
− | |||
− | |||
Endif | Endif | ||
− | |||
Next | Next | ||
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button2_Click() | '''Public''' Sub Button2_Click() | ||
Riga 142: | Riga 76: | ||
pr.Kill | pr.Kill | ||
− | <FONT color= | + | <FONT color=gray>' ''Si attende la chiusura del processo:''</font> |
Repeat | Repeat | ||
Wait 0.01 | Wait 0.01 | ||
− | Until Not Exist("/proc | + | Until Not Exist("/proc" &/ pid) |
− | <FONT color= | + | <FONT color=gray>' ''Questa ultima riga, ovviamente, può essere scritta anche così:'' |
− | + | ' '''Until Exist("/proc" &/ pid) == False'''</font> | |
+ | |||
+ | Print "Il processo si è chiuso" | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | ==Chiusura con ''Killall'' ed attesa con ''Wait''== | ||
+ | |||
+ | Private pr As Process | ||
+ | |||
+ | |||
+ | '''Public''' Sub Form_Open() | ||
+ | |||
+ | <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font> | ||
+ | pr = Exec ["gedit"] | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | '''Public''' Sub Button1_Click() | ||
+ | |||
+ | <FONT color=gray>' ''Chiusura ed attesa della effettiva chiusura:''</font> | ||
+ | Shell "killall gedit" Wait | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | ==Chiusura e successiva verifica con ''ps aux | grep...''== | ||
+ | |||
+ | Private pr As Process | ||
+ | |||
+ | |||
+ | '''Public''' Sub Form_Open() | ||
+ | |||
+ | <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font> | ||
+ | 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 <SUP>[[[#Note|Nota 1]]]</sup> | ||
− | + | Print risposta <FONT color=gray>' ''Se il valore della variabile "risposta" è uguale a zero, allora il programma si è chiuso.''</font> | |
'''End''' | '''End''' | ||
Riga 156: | Riga 132: | ||
− | + | =Note= | |
− | |||
[1] Questa soluzione è stata suggerita dall'Amministratore ''Leo72'' del Forum del sito Gambas-it.org. | [1] Questa soluzione è stata suggerita dall'Amministratore ''Leo72'' del Forum del sito Gambas-it.org. |
Versione delle 09:47, 26 dic 2021
Possiamo considerare almeno cinque modalità di attesa e verifica della chiusura di un programma esterno aperto e gestito mediante "Process ".
Indice
- 1 Chiusura e successiva verifica con Process.State
- 2 Chiusura e successiva verifica con la sollevazione di un evento "Process.Kill"
- 3 Chiusura e verifica dell'esistenza della cartella del processo in "/proc/"
- 4 Chiusura con Killall ed attesa con Wait
- 5 Chiusura e successiva verifica con ps aux | grep...
- 6 Note
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 ' Lanciamo come esempio l'editor di testi "Gedit": 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() ' Lanciamo 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() ' 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 [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.