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 con ''Killall'' ed attesa con ''Wait''==
 
 
Private pr As Process
 
 
 
'''Public''' Sub Form_Open()
 
 
<FONT color=#006400>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
 
  pr = Exec ["gedit"]
 
 
'''End'''
 
 
 
'''Public''' Sub Button1_Click()
 
 
<FONT color=#006400>' ''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=#006400>' ''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  |[[#Note|1]]|
 
 
  Print risposta
 
 
<FONT color=#006400>' ''Se il valore contenuto nella variabile "risposta" è uguale a zero,''
 
' ''allora il programma si è chiuso.''</font>
 
 
'''End'''
 
 
 
  
 
==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=#006400>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
  pr = Exec ["gedit"]
+
  pr = Exec ["gedit"]
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
Riga 71: Riga 16:
 
   pr.Kill
 
   pr.Kill
 
    
 
    
  <FONT color=#006400>' ''Verifica della chiusura del programma:''</font>
+
  <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=#006400>' ''Se il valore di "pr.State" è uguale a zero,''
+
  <FONT color=gray>' ''Se il valore di "pr.State" è uguale a zero, allora il programma si è chiuso:''</font>
' 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=#006400>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
  pr = Exec ["gedit"] As "processo"
+
  pr = Exec ["gedit"] As "processo"
 
   
 
   
 
  '''End'''
 
  '''End'''
 
   
 
   
 
   
 
   
  <FONT color=#006400>' ''Si solleverà un evento "_Kill()" alla chiusura del programma gestito da "Process":''</font>
+
  <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 !"
+
  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/" & cartella & "/comm") Then
+
       comm = File.Load("/proc" &/ cartella &/ "comm")
       comm = File.Load("/proc/" & cartella & "/comm")
+
      If comm Like "gedit*" Then pid = cartella
 
        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=#006400>' ''Si attende la chiusura del processo:''</font>
+
  <FONT color=gray>' ''Si attende la chiusura del processo:''</font>
 
   Repeat
 
   Repeat
 
     Wait 0.01
 
     Wait 0.01
   Until Not Exist("/proc/" & pid)
+
   Until Not Exist("/proc" &/ pid)
  <FONT color=#006400>' ''Questa riga, ovviamente, può essere scritta anche così:''
+
  <FONT color=gray>' ''Questa ultima riga, ovviamente, può essere scritta anche così:''
  '''Until Exist("/proc/" & pid) = False'''</font>
+
' '''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>&#091;[[#Note|Nota 1]]&#093;</sup>
 
   
 
   
    Print "Il processo si è chiuso"
+
  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=
==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 ".

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.