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

Da Gambas-it.org - Wikipedia.
(Nuova pagina: L'argomento in questione tratta di come cercare, individuare e raccogliere il PID di un programma{1}, non lanciato dal programma .gambas con ''process''. <BR>Daremo la soluzi...)
 
Riga 1: Riga 1:
L'argomento in questione tratta di come cercare, individuare e raccogliere il PID di un programma{[[#Note|1]]}, non lanciato dal programma .gambas con ''process''.
+
L'argomento in questione tratta di come cercare, individuare e raccogliere il PID di un programma{[[#Note|1]]}, che non sia stato lanciato dal programma principale .gambas con ''process''.
<BR>Daremo la soluzione con il comando bash ''ps aux | grep nome_programma'', e mostreremo la predetta soluzione facendo l'esempio di come impedire che il medesimo programma ''.gambas'' sia erroneamente lanciato due volte.
+
<BR>Mostrremo la soluzione più breve con il comando bash: ''pgrep -f -l nome_programma''.
<BR>E', dunque, necessario ottenere il PID del programma{[[#Note|1]]}.
 
 
 
  
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
   
 
   
  Dim index As String
+
Dim index As String
  Dim plura As String[]
+
Dim sotto$ As String[]
  Dim a, b, c As Integer
 
 
<FONT color=#006400>' ''Otteniamo il PID dei processi (programmi) aperti, aventi il medesimo "''nome_programma.gambas''":''</font>
 
    Shell "ps -aux | grep " & "nome_programma" To index
 
 
    
 
    
  plura = Split(index, " ")
+
<FONT color=#006400>' ''Otteniamo il PID dei processo (programma) aperto:''</font>
+
    Exec ["pgrep", "-f", "-l", "nome_programma"] Wait To index
  c = plura.Count
 
 
  For a = 0 To c - 1
 
 
   
 
   
  <FONT color=#006400>' ''Cerca il riferimento al 1° programma aperto (cioè a se stesso):''</font>
+
  <FONT color=#006400>' ''Suddividiamo la stringa, restituita da "pgrep" in tante sotto-stringhe,''
     If Right(plura[a], 20) Like "*.gambas*" Then
+
' ''riempiendole con i singoli caratteri o con le parole diversi dagli spazi vuoti:''</font>
 +
     sotto$ = Split(Trim$(index), " ")
 
   
 
   
  <FONT color=#006400>' ''Così può passare a "Kill" la stringa, contenuta da ciascuna variabile "plura"''
+
  <FONT color=#006400>' ''Poiché la prima parola, restituita da "pgrep", è proprio il numero del PID''
  ' ''"successiva" alle stringhe che si riferiscono al 1° processo (che resta così protetto),''
+
  ' ''del programma, andiamo a leggere il contenuto della prima sotto-stringa dell'array:''</font>
' ''sino a quando non passerà la stringa contenente il PID del 2° processo che si è appena aperto:</font>
+
    Print sotto$[0]
      For b = a To 100
 
<FONT color=#006400>' ''Non appena viene passato il PID del 2° processo, questo viene terminato:''</font>
 
        Try Shell "kill " & plura[b]
 
      Next
 
 
   
 
   
    Endif
+
  <FONT color=#006400>' ''Quindi chiudiamo il processo (programma) aperto, che volevamo terminare:''</font>
   
+
    Shell "kill " & sotto$[0]
  Next
 
 
   
 
   
 
  '''End'''
 
  '''End'''
 +
  
  
 
==Note==
 
==Note==
[1] Attenzione ! L'intento è quello di ottenere il PID del programma in quanto ''processo'', non della ''finestra'' del programma !
+
[1] Attenzione ! L'intento è quello di ottenere il PID del programma in quanto ''processo'', <SPAN style:"text-decoration=underline">non</span> della ''finestra'' del programma !

Versione delle 16:39, 13 mar 2012

L'argomento in questione tratta di come cercare, individuare e raccogliere il PID di un programma{1}, che non sia stato lanciato dal programma principale .gambas con process.
Mostrremo la soluzione più breve con il comando bash: pgrep -f -l nome_programma.

Public Sub Form_Open()

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

' Suddividiamo la stringa, restituita da "pgrep" in tante sotto-stringhe,
' riempiendole con i singoli caratteri o con le parole diversi dagli spazi vuoti:
   sotto$ = Split(Trim$(index), " ")

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

' Quindi chiudiamo il processo (programma) aperto, che volevamo terminare:
   Shell "kill " & sotto$[0]

End


Note

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