Differenze tra le versioni di "Chiudere programmi esterni"

Da Gambas-it.org - Wikipedia.
Riga 34: Riga 34:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
     Shell "Killall ''nome_programma''"
+
     Shell "Killall ''nome_programma_esterno''"
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 43: Riga 43:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
     Shell "Kill ''numero_PID_del_programma''"
+
     Shell "Kill ''numero_PID_del_programma_esterno''"
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 57: Riga 57:
 
    
 
    
 
   Dim pidIncrementato As Integer
 
   Dim pidIncrementato As Integer
 
+
     pidIncrementato = ''numero_del_PID'' + 1
+
     pidIncrementato = ''numero_PID_del_programma_esterno'' + 1
 
+
 
     Shell "Kill pidIncrementato"
 
     Shell "Kill pidIncrementato"
 
   
 
   

Versione delle 09:15, 15 mar 2012

Per terminare un programma esterno aperto è possibile usare Kill o Killall (a seconda delle situazioni).

Va distinto però il Kill, quale metodo di Process, dal Kill, quale comando da utilizzare con Shell (o Exec).


Caso in cui un programma esterno sia stato aperto dalla nostra applicazione.gambas, e sia gestito mediante "process"{1}

Private hp As Process


Public Sub Form_Open()

' Avviamo un programma esterno e lo gestiamo come processo:
   hp = Exec["nome_programma_esterno]

End


Public Sub Button1_Click()

' Chiudiamo il programma esterno mediante il metodo di Process: Kill:
   hp.Kill

End


Caso in cui un programma esterno non sia stato aperto dalla nostra applicazione.gambas, e non sia gestito mediante "process"

In questo caso potremo utilizzare due soluzioni.

1) Possiamo chiudere il programma esterno con il comando Killall, lanciato con Shell (o Exec), al quale passiamo il nome del programma:

Public Sub Button1_Click()

   Shell "Killall nome_programma_esterno"

End


2) Possiamo chiudere il programma esterno con il comando Kill, lanciato con Shell (o Exec), al quale passiamo il numero del PID del programma {2}.

Public Sub Button1_Click()

   Shell "Kill numero_PID_del_programma_esterno"

End


Caso in cui il programma esterno sia stato aperto dalla nostra applicazione.gambas, sia gestito mediante "process", e si intenda chiuderlo con il comando Kill

Possiamo passare al comando Kill anche il PID, ottenuto con il metodo ".Id" di Process, di un programma esterno lanciato dal nostro programma.gambas e gestito mediante "Process".
L'algoritmo, per ottenere il numero del PID mediante il metodo " .Id" di "Process", è trattato in questa pagina specifica. Come anche vediamo in quella pagina, il numero del PID di un programma aperto dalla nostra applicazione.gambas mediante Shell (o Exec), affinché l'esecuzione del comando "Kill" abbia buon fine, deve essere passato a Kill incrementato di un'unità:

 Public Sub Button1_Click()
 
  Dim pidIncrementato As Integer

   pidIncrementato = numero_PID_del_programma_esterno + 1

   Shell "Kill pidIncrementato"

End


Note

[1] Vedere al riguardo anche questa pagina.

[2] Come cercare ed estrarre il PID di un programma, è stato già trattato in questa pagina specifica.{3}

[3] Potremmo utilizzare, per trovare e passare il PID di un programma aperto e non gestito mediante "Process", anche questo algoritmo:

Public Sub Button1_Click()

Dim riga As String
Dim plus As String[]

 Shell "pgrep -f -l nome_programma_da_chiudere" To riga

 plus = Split(riga, " ")

' Passa a Kill il primo elemento dell'array stringa,
' il quale, essendo parte della stringa generata dal comando "pgrep",
' contiene sempre il numero del PID del programma:
   Shell "kill " & plus[0]

End

oppure quest'altro che, però, procederà in modo un po' più... brutale alla chiusura del programma:

Public Sub Button1_Click()

Dim riga As String
Dim plus As String[]
Dim b As Integer

 Shell "ps -aux | grep " & "nome_programma_da_chiudere" To riga

 plus = Split(riga, " ")

 For b = 0 To plus.Max
' Passa a Kill - "forzatamente" - ed in modo distinto ogni elemento dell'array stringa.
' Quando Kill riceverà l'elemento contenente la stringa con il numero del PID del programma, questo si chiuderà:
   Try Shell "kill " & plus[b]
 Next

End