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 la Classe ''Process''.
  
==Chiusura e successiva verifica con ''Process.State''==
+
==Chiusura e successiva verifica con "Process.State"==
 
  Private pr As Process
 
  Private pr As Process
 
    
 
    
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Lancia come esempio l'editor di testi "Gedit":''</font>
 
   pr = Exec ["gedit"]
 
   pr = Exec ["gedit"]
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button1_Click()
+
   
 +
Public Sub Button1_Click()
 
   
 
   
 
   pr.Kill
 
   pr.Kill
 
    
 
    
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Compie questo ciclo di attesa, sinché il processo non è ancora chiuso:''</font>
   While pr.State = 1
+
   While pr.State = Process.Running
 
     Print "Chiusura programma in corso"
 
     Print "Chiusura programma in corso"
 
   Wend
 
   Wend
Riga 24: Riga 25:
 
   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 dell'Evento "_Kill()" della Classe ''Process''==
 
  Private pr As Process
 
  Private pr As Process
 
    
 
    
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Lancia come esempio l'editor di testi "Gedit":''</font>
 
   pr = Exec ["gedit"] As "processo"
 
   pr = Exec ["gedit"] As "processo"
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
 
  <FONT color=gray>' ''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 50: Riga 51:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Lancia come esempio l'editor di testi "Gedit":''</font>
 
   pr = Shell "gedit"
 
   pr = Shell "gedit"
 
    
 
    
 
   Me.Center
 
   Me.Center
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button1_Click()
+
   
 +
Public Sub Button1_Click()
 
   
 
   
 
   Dim cartella, comm As String
 
   Dim cartella, comm As String
Riga 70: Riga 72:
 
   Next
 
   Next
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button2_Click()
+
   
 +
Public Sub Button2_Click()
 
   
 
   
 
   pr.Kill
 
   pr.Kill
Riga 85: Riga 88:
 
   Print "Il processo si è chiuso"
 
   Print "Il processo si è chiuso"
 
   
 
   
  '''End'''
+
  End
  
 
==Chiusura con ''Killall'' ed attesa con ''Wait''==
 
==Chiusura con ''Killall'' ed attesa con ''Wait''==
Riga 92: Riga 95:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Lancia come esempio l'editor di testi "Gedit":''</font>
 
   pr = Exec ["gedit"]
 
   pr = Exec ["gedit"]
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button1_Click()
+
   
 +
Public Sub Button1_Click()
 
   
 
   
 
  <FONT color=gray>' ''Chiusura ed attesa della effettiva chiusura:''</font>
 
  <FONT color=gray>' ''Chiusura ed attesa della effettiva chiusura:''</font>
 
   Shell "killall gedit" Wait
 
   Shell "killall gedit" Wait
 
   
 
   
  '''End'''
+
  End
  
 
==Chiusura e successiva verifica con ''ps aux | grep...''==
 
==Chiusura e successiva verifica con ''ps aux | grep...''==
Riga 111: Riga 115:
 
    
 
    
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
  <FONT color=gray>' ''Lanciamo come esempio l'editor di testi "Gedit":''</font>
+
  <FONT color=gray>' ''Lancia come esempio l'editor di testi "Gedit":''</font>
 
   pr = Exec ["gedit"]
 
   pr = Exec ["gedit"]
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button1_Click()
+
 
 +
  Public Sub Button1_Click()
 
   
 
   
 
   Dim Risposta As String   
 
   Dim Risposta As String   
Riga 124: Riga 129:
 
   pr.kill
 
   pr.kill
 
    
 
    
   Shell "ps aux | grep o.gambas" & " | grep -wv grep | wc -l" To Risposta  <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
   Shell "ps aux | grep o.gambas" & " | grep -wv grep | wc -l" To Risposta  <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 
   
 
   
 
   Print risposta <FONT color=gray>' ''Se il valore della variabile "risposta" è uguale a zero, allora il programma si è chiuso.''</font>
 
   Print risposta <FONT color=gray>' ''Se il valore della variabile "risposta" è uguale a zero, allora il programma si è chiuso.''</font>
 
   
 
   
  '''End'''
+
  End
  
  

Versione attuale delle 16:38, 11 lug 2023

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.