Differenze tra le versioni di "Conoscere in tempo reale il numero dell´ultimo processo appena aperto"
Riga 1: | Riga 1: | ||
− | Per conoscere l'ultimo processo | + | Per conoscere l'ultimo processo avviato bisognerà interrogare la cartella ''proc'' del ''File System''. |
− | Nell'esempio, che segue, si andrà a leggere nella cartella ''proc'' ogni 200 millesimi di secondo mediante l'attivazione di un ''Timer'', per conoscere in tempo reale il numero dell'ultimo processo appena aperto, nonché il file lanciato ed il suo programma esecutore. | + | Vediamo di seguito un paio di modalità. |
+ | |||
+ | |||
+ | ===Leggere il file ''/proc/loadavg''=== | ||
+ | Il modo più semplice, per conoscere l'ultimo processo avviato, è quello di leggere l'ultimo campo a destra presente nel file di testo ''loadavg'' prtesente nella Cartella di ''/proc'' . | ||
+ | |||
+ | Esempio: | ||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim s As String | ||
+ | |||
+ | s = Scan(File.Load("/proc/loadavg"), "* *")[0] | ||
+ | |||
+ | Print s | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | ===Verificare le sub-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 il numero più elevato in quel momento, apparterrà al più recente processo avviato. | ||
+ | |||
+ | |||
+ | Nell'esempio, che segue, si andrà a leggere nella cartella ''/proc'' ogni 200 millesimi di secondo mediante l'attivazione di un ''Timer'', per conoscere in tempo reale il numero dell'ultimo processo appena aperto, nonché il file lanciato ed il suo programma esecutore. | ||
In sostanza si dovrà prima lanciare il codice Gambas, sotto descritto, e successivamente aprire un qualsiasi programma. | In sostanza si dovrà prima lanciare il codice Gambas, sotto descritto, e successivamente aprire un qualsiasi programma. | ||
Riga 35: | Riga 57: | ||
− | + | ====Il medesimo esempio, ma con un'applicazione ''a riga di comando''==== | |
− | ===con un'applicazione 'a riga di comando'=== | + | Se l'applicazione Gambas è ''a riga di comando'', potremo servirci di un ciclo, dal quale si uscirà soltanto quando sarà stato aperto un nuovo processo: |
− | Se l'applicazione Gambas è 'a riga di comando', potremo servirci di un ciclo, dal quale si uscirà soltanto quando sarà stato aperto un nuovo processo: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
Riga 55: | Riga 76: | ||
<FONT color=gray>' ''Oppure anche così:'' | <FONT color=gray>' ''Oppure anche così:'' | ||
− | For Each s In Dir("/proc", Null, gb.Directory) | + | '''For Each s In Dir("/proc", Null, gb.Directory)''' |
− | If IsDigit(s) Then s = s | + | '''If IsDigit(s) Then s = s''' |
− | Next</font> | + | '''Next'''</font> |
Print "Processo: "; s | Print "Processo: "; s |
Versione delle 03:35, 15 mar 2016
Per conoscere l'ultimo processo avviato bisognerà interrogare la cartella proc del File System.
Vediamo di seguito un paio di modalità.
Leggere il file /proc/loadavg
Il modo più semplice, per conoscere l'ultimo processo avviato, è quello di leggere l'ultimo campo a destra presente nel file di testo loadavg prtesente nella Cartella di /proc .
Esempio:
Public Sub Main() Dim s As String s = Scan(File.Load("/proc/loadavg"), "* *")[0] Print s End
Verificare le sub-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 il numero più elevato in quel momento, apparterrà al più recente processo avviato.
Nell'esempio, che segue, si andrà a leggere nella cartella /proc ogni 200 millesimi di secondo mediante l'attivazione di un Timer, per conoscere in tempo reale il numero dell'ultimo processo appena aperto, nonché il file lanciato ed il suo programma esecutore.
In sostanza si dovrà prima lanciare il codice Gambas, sotto descritto, e successivamente aprire un qualsiasi programma.
Public Sub Form_Open() With Timer1 .delay = 200 .Start End With End Public Sub Timer1_Timer() Dim s As String Dim ss As String[] ' Ogni ms 200 si legge tutto il contenuto della cartella "proc". ' Se il contenuto letto è una cartella, allora vuol dire che si tratta di un processo. ' Risulterà visibile, come effetto, l'ultimo processo in ordine di tempo aperto: For Each s In Dir("/proc", Null, gb.Directory) TextEdit1.RichText = "Processo: " & s Next If Exist("/proc" &/ s &/ "cmdline") Then ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/") TextEdit1.RichText &= "Programma esecutore:<BR>" & String@(Pointer@(ss.Data)) & "<P>File eseguito:<BR>" & String@(Pointer@(ss.Data + 32)) Endif End
Il medesimo esempio, ma con un'applicazione a riga di comando
Se l'applicazione Gambas è a riga di comando, potremo servirci di un ciclo, dal quale si uscirà soltanto quando sarà stato aperto un nuovo processo:
Public Sub Main() Dim b As Byte Dim s As String Dim ss As String[] ' Verifichiamo inizialmente quante cartelle sono presenti in "/proc": b = Dir("/proc", Null, gb.Directory).Count Do Wait 0.3 Loop Until b < 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