Differenze tra le versioni di "Conoscere in tempo reale il numero dell'ultimo processo appena aperto"

Da Gambas-it.org - Wikipedia.
 
Riga 5: Riga 5:
 
===Leggere il file ''/proc/loadavg''===
 
===Leggere il file ''/proc/loadavg''===
 
Per conoscere in tempo reale l'ultimo processo avviato nel sistema, è quello di leggere l'ultimo campo a destra presente nel file di testo ''loadavg'' presente nella Cartella di ''/proc''. Tale campo rappresenta il PID del processo.
 
Per conoscere in tempo reale l'ultimo processo avviato nel sistema, è quello di leggere l'ultimo campo a destra presente nel file di testo ''loadavg'' presente nella Cartella di ''/proc''. Tale campo rappresenta il PID del processo.
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim s As String
 
   Dim s As String
Riga 16: Riga 16:
 
   Loop
 
   Loop
 
   
 
   
  '''End'''
+
  End
  
  
Riga 23: Riga 23:
  
 
Nel seguente esempio si verificherà in tempo reale il numero identificativo (PID) della cartella dell'ultimo processo effettivamente attivo:
 
Nel seguente esempio si verificherà in tempo reale il numero identificativo (PID) della cartella dell'ultimo processo effettivamente attivo:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim ss As String[]
 
   Dim ss As String[]
Riga 34: Riga 34:
 
   Loop
 
   Loop
 
   
 
   
  '''End'''
+
  End
  
  
 
In quest'altro esempio si verificherà la quantità iniziale di cartelle dei processi aperti. Se tale quantità di cartelle dei processi aumenta, allora è stato lanciato un programma, e ne verrà mostrato il PID:
 
In quest'altro esempio si verificherà la quantità iniziale di cartelle dei processi aperti. Se tale quantità di cartelle dei processi aumenta, allora è stato lanciato un programma, e ne verrà mostrato il PID:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim c As Short
 
   Dim c As Short
Riga 67: Riga 67:
 
   Endif
 
   Endif
 
    
 
    
  '''End'''
+
  End

Versione attuale delle 16:47, 11 lug 2023

Per conoscere l'ultimo processo avviato bisognerà interrogare la cartella /proc del FileSystem.

Vediamo di seguito un paio di modalità.

Leggere il file /proc/loadavg

Per conoscere in tempo reale l'ultimo processo avviato nel sistema, è quello di leggere l'ultimo campo a destra presente nel file di testo loadavg presente nella Cartella di /proc. Tale campo rappresenta il PID del processo.

Public Sub Main()

 Dim s As String

 Do
   s = Scan(File.Load("/proc/loadavg"), "* */* *")[3]
   Write "\r" & Trim(s)
   Flush 
   Wait 0.1
 Loop

End


Verificare le cartelle dei processi aperti

In tale modalità si controlleranno le sottocartelle presenti nella cartella di /proc, verificando ogni tot tempo la presenza di una nuova Cartella relativa ad un processo. La Cartella, avente come nome identificativo il numero più elevato in quel momento, apparterrà al più recente processo avviato.

Nel seguente esempio si verificherà in tempo reale il numero identificativo (PID) della cartella dell'ultimo processo effettivamente attivo:

Public Sub Main()

 Dim ss As String[]

 Do
   ss = Dir("/proc", "*", gb.Directory)
   Write "\r\e[0mProcesso attivo: \e[31m" & ss[ss.Max]
   Flush 
   Wait 0.01
 Loop

End


In quest'altro esempio si verificherà la quantità iniziale di cartelle dei processi aperti. Se tale quantità di cartelle dei processi aumenta, allora è stato lanciato un programma, e ne verrà mostrato il PID:

Public Sub Main()

 Dim c As Short
 Dim s As String
 Dim ss As String[]

' Verifichiamo inizialmente quante cartelle sono presenti in "/proc":
 c = Dir("/proc", Null, gb.Directory).Count
 
 Repeat
   Wait 0.1
 Until c < Dir("/proc", Null, gb.Directory).Count
 
' L'ultima cartella dell'indice del vettore generato dalla funzione "Dir()" è l'ultimo processo appena aperto:
 s = Dir("/proc", Null, gb.Directory)[Dir("/proc", Null, gb.Directory).Max]

' Oppure anche così:
' For Each s In Dir("/proc", Null, gb.Directory)
'   If IsDigit(s) Then s = s
' Next
      
 Print "Processo: "; s

 If Exist("/proc" &/ s &/ "cmdline") Then
   ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/")
   Print "Esecutore:  "; String@(Pointer@(ss.Data))
   Print "File eseguito:  "; String@(Pointer@(ss.Data + (8 * ss.Max)))
 Endif
 
End