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