Differenze tra le versioni di "Conoscere in tempo reale il numero dell´ultimo processo appena aperto"
Da Gambas-it.org - Wikipedia.
(Nuova pagina: Per conoscere l'ultimo processo aperto bisognerà interrogare la cartella ''proc'' del ''File System'', la quale contiene - fra l'altro - le sub-cartelle dei processi aperti. Nell'ese...) |
|||
Riga 17: | Riga 17: | ||
Dim ss As String[] | Dim ss As String[] | ||
− | <FONT color= | + | <FONT color=gray>' ''Ogni ms 150 si legge tutto il contenuto della cartella "proc".'' |
' ''Se il contenuto letto è una cartella, allora vuol dire che si tratta di un processo.'' | ' ''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:''</font> | ' ''Risulterà visibile, come effetto, l'ultimo processo in ordine di tempo aperto:''</font> | ||
Riga 29: | Riga 29: | ||
Replace(ss[ss.Max], Chr(0), "<p><FONT color=#000000>Esecutore: <BR><FONT color=#FF0000>") & | Replace(ss[ss.Max], Chr(0), "<p><FONT color=#000000>Esecutore: <BR><FONT color=#FF0000>") & | ||
Replace(ss[0], Chr(0), "") | Replace(ss[0], Chr(0), "") | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | ===con un'applicazione 'a riga di comando'=== | ||
+ | Se l'applicazione Gamas è 'a riga di comando', potremo servirci di un ciclo: | ||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim b As Byte | ||
+ | Dim s As String | ||
+ | Dim ss As String[] | ||
+ | |||
+ | <FONT color=gray>' ''Verifichiamo inizialmente quante cartelle sono presenti in "/proc":''</font> | ||
+ | b = Dir("/proc", Null, gb.Directory).Count | ||
+ | |||
+ | Do | ||
+ | Wait 0.1 | ||
+ | Loop Until b < Dir("/proc", Null, gb.Directory).Count | ||
+ | |||
+ | <FONT color=gray>' ''L'ultima cartella dell'indice di "/proc" è l'ultimo processo appena aperto:''</font> | ||
+ | s = Dir("/proc", Null, gb.Directory)[Dir("/proc", Null, gb.Directory).Max] | ||
+ | |||
+ | Print "Processo: "; s | ||
+ | |||
+ | Try ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/") | ||
+ | |||
+ | Print "File eseguito: " | ||
+ | Try Print Replace(ss[ss.Max], Chr(0), "\nEsecutore: ") | ||
+ | Try Print Replace(ss[0], Chr(0), Null) | ||
'''End''' | '''End''' |
Versione delle 18:58, 8 ott 2014
Per conoscere l'ultimo processo aperto bisognerà interrogare la cartella proc del File System, la quale contiene - fra l'altro - le sub-cartelle dei processi aperti.
Nell'esempio, che segue, si andrà a leggere nella cartella proc ogni 150 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.
Public Sub Form_Open() With Timer1 .delay = 150 .Start End With End Public Sub Timer1_Timer() Dim s As String Dim ss As String[] ' Ogni ms 150 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", "", gb.Directory) TextEdit1.RichText = "Processo: <BR><FONT color=#FF0000>" & s Next Try ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/") Try TextEdit1.RichText &= "<BR><FONT color=#000000>File eseguito: <BR><FONT color=#FF0000>" & Replace(ss[ss.Max], Chr(0), "<p><FONT color=#000000>Esecutore: <BR><FONT color=#FF0000>") & Replace(ss[0], Chr(0), "") End
con un'applicazione 'a riga di comando'
Se l'applicazione Gamas è 'a riga di comando', potremo servirci di un ciclo:
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.1 Loop Until b < Dir("/proc", Null, gb.Directory).Count ' L'ultima cartella dell'indice di "/proc" è l'ultimo processo appena aperto: s = Dir("/proc", Null, gb.Directory)[Dir("/proc", Null, gb.Directory).Max] Print "Processo: "; s Try ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/") Print "File eseguito: " Try Print Replace(ss[ss.Max], Chr(0), "\nEsecutore: ") Try Print Replace(ss[0], Chr(0), Null) End