Conoscere in tempo reale il numero dell'ultimo processo appena aperto
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