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

Da Gambas-it.org - Wikipedia.
Riga 37: Riga 37:
  
  
2) Qui mostreremo una soluzione <SPAN style="text-decoration: underline">senza</span> ''Shell'', ma con il solo uso delle funzioni di Gambas, cercando il PID nel percorso ''/proc/'':
+
2) Qui mostreremo la soluzione con il comando bash ''ps'':
 +
'''Public''' Sub Button1_Click()
 +
 +
  Dim s1, s2As String
 +
  Dim ss As String[]
 +
 +
  Shell "ps -C \"''nome_del_programma\"" To s1
 +
 +
    s2 = Replace(s1, "\n", " ")
 +
 
 +
    ss = Split(s, " ", "", True)
 +
 
 +
<FONT color=#006400>' ''Mostriamo il nome del programma lanciato ed il suo PID:''</font>
 +
    Print ss[ss.max]; " = "; ss[4]
 +
 +
'''End'''
 +
 
  
 +
3) Qui mostreremo una soluzione <SPAN style="text-decoration: underline">senza</span> ''Shell'', ma con il solo uso delle funzioni di Gambas, cercando il PID nel percorso ''/proc/'':
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
Dim cartella, pid As String
+
  Dim cartella, pid As String
 
   
 
   
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 "''nome_programma*''" Then pid = cartella
+
        If comm Like "''nome_programma*''" Then pid = cartella
 
   
 
   
    Endif
+
      Endif
 
      
 
      
  Next
+
  Next
 
   
 
   
 
  <FONT color=#006400>' ''Mostra il numero del PID del programma:''</font>
 
  <FONT color=#006400>' ''Mostra il numero del PID del programma:''</font>
    Print pid
+
      Print pid
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 08:17, 3 ott 2012

Vedremo come ottenere il PID del programma principale, ed il PID di un programma esterno |1|.


Ottenere il PID del programma Gambas principale

Si potrà ottenere il PID del programma principale attivo mediante la funzione specifica di Gambas:

Application.Handle

oppure

Application.Id


Ottenere il PID di un programma esterno al programma principale

Per individuare e raccolgiere il PID di un programma esterno a quello Gambas principale, si potranno adottare almeno due modalità:


Caso in cui il programma esterno non sia gestito dal programma.gambas mediante process.

1) 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


2) Qui mostreremo la soluzione con il comando bash ps:

Public Sub Button1_Click()

 Dim s1, s2As String
 Dim ss As String[]

  Shell "ps -C \"nome_del_programma\"" To s1

   s2 = Replace(s1, "\n", " ")
 
   ss = Split(s, " ", "", True)
 
' Mostriamo il nome del programma lanciato ed il suo PID:
    Print ss[ss.max]; " = "; ss[4]

End


3) Qui mostreremo una soluzione senza Shell, ma con il solo uso delle funzioni di Gambas, cercando il PID nel percorso /proc/:

Public Sub Button1_Click()

 Dim cartella, pid As String

  For Each cartella In Dir("/proc")

     If Exist("/proc/" & cartella & "/comm") Then
       comm = File.Load("/proc/" & cartella & "/comm")

       If comm Like "nome_programma*" Then pid = cartella

     Endif
   
  Next

' Mostra il numero del PID del programma:
     Print pid
 
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"

' Individuiamo il numero del PID, che sarà uguale al valore di .Id + 1 :   |2|
   pid = hp.Id + 1   |3|

   Print pid

End


Note

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

[2] Il numero del PID, ottenuto con il metodo " .Id" di Process, di un programma esterno gestito mediante "process", è uguale al numero del PID + 1. Questo perché il processo figlio assume un numero di PID successivo a quello del processo padre (in questo caso della Shell).

[3] il valore restituito dalla proprietà .Id di Process rappresenta in realtà il numero del PID della Shell.