Differenze tra le versioni di "Individuare ed estrarre il PID di un programma"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
L'argomento in questione tratta di come cercare, individuare e raccogliere il PID di un programma esterno{[[#Note|1]]}.
+
L'argomento in questione tratta di come cercare, individuare e raccogliere il PID di un programma esterno |[[#Note|1]]|.
  
  
Riga 5: Riga 5:
 
<BR>Mostremo la soluzione più breve con il comando bash: ''pgrep -f nome_programma''.
 
<BR>Mostremo la soluzione più breve con il comando bash: ''pgrep -f nome_programma''.
  
  '''Public''' Sub Form_Open()
+
  '''Public''' Sub Button1_Click()
 
   
 
   
 
  Dim index As String
 
  Dim index As String
Riga 21: Riga 21:
 
     Print sotto$[0]
 
     Print sotto$[0]
 
   
 
   
 +
'''End'''
 +
 +
 +
In questo altro caso mostreremo una soluzione <SPAN style="text-decoration: underline">senza</span> ''Shell'', ma con il solo uso delle funzioni di Gambas:
 +
 +
'''Public''' Sub Button1_Click()
 +
 +
Dim h1, pid As String
 +
Dim h2 As String[]
 +
 +
For Each pid In Dir("/proc")
 +
 +
    If Exist("/proc/" & pid & "/status") Then
 +
      h1 = File.Load("/proc/" & pid & "/status")
 +
      h2 = Split(h1, "\n")
 +
 +
      If h2[0] Like "*nome_programma*" Then
 +
<FONT color=#006400>' ''Mostra il numero del PID del programma:''</font>
 +
        Print pid
 +
        Exit
 +
      Endif
 +
 +
    Endif
 +
   
 +
  Next
 +
 
 
  '''End'''
 
  '''End'''
  
Riga 28: Riga 54:
  
 
  Private hp As Process
 
  Private hp As Process
  pid As Integer
+
  Private pid As Integer
 
   
 
   
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()

Versione delle 21:38, 13 ago 2012

L'argomento in questione tratta di come cercare, individuare e raccogliere il PID di un programma esterno |1|.


Caso in cui il programma esterno non sia gestito dal programma.gambas mediante process.
Mostremo la soluzione più breve con il comando bash: pgrep -f nome_programma.

Public Sub Button1_Click()

Dim index As String
Dim sotto$ As String[]
 
' Otteniamo il PID dei processo (programma) aperto:
   Shell "pgrep -f nome_programma"] To index

' La variabile index sarà composta da due righe, contenenti caratteri numerali e separate da un ritorno a capo.
' Le andremo a distinguere in due sotto-stringhe distinte:
   sotto$ = Split(Trim$(index), "\n")

' Poiché la prima parola, restituita da "pgrep", è proprio il numero del PID del programma,
' andiamo a leggere la prima sotto-stringa dell'array. Qui è contenuto il PID del programma:
   Print sotto$[0]

End


In questo altro caso mostreremo una soluzione senza Shell, ma con il solo uso delle funzioni di Gambas:

Public Sub Button1_Click()

Dim h1, pid As String
Dim h2 As String[]

For Each pid In Dir("/proc")

   If Exist("/proc/" & pid & "/status") Then
     h1 = File.Load("/proc/" & pid & "/status")
     h2 = Split(h1, "\n")

     If h2[0] Like "*nome_programma*" Then
' Mostra il numero del PID del programma:
       Print pid
       Exit
     Endif

   Endif
   
 Next
 
End


Caso in cui il programma esterno sia stato lanciato dal nostro programma.gambas e sia gestito mediante process.

Private hp As Process
Private pid As Integer

Public Sub Button1_Click()

 hp = Shell "nome_programma"

' Il numero del PID, ottenuto con il metodo " .Id" di Process,
' di un programma esterno gestito mediante "process", è uguale al numero del PID + 1 :
   pid = hp.Id + 1

   Print pid

End


Note

[1] Attenzione ! L'intento è quello di ottenere il PID del programma in quanto processo, non della finestra del programma !