per diverse ragioni che non sto ad elencare, mi serve che un'applicazione gambas (audio_recorder.gambas) sia sempre in esecuzione, ma i metodi "standard" che cercano il PID dell'applicazione non funzionano, perche' in realta' l'applicativo gambas e' interpretato ed i pid restituiti sono quelli dell'inteprete "gbr3".
Il metodo che ho implementato in pratica conta le linee restituite dal comando "grep", che cerca su tutta la linea restituita da "ps".
Spero possa esservi utile:
#!/bin/bash
#beware 0 if not running, 1 if one is running, 2 or more if more are running
recorder_running=$(ps aux | grep gbr3 | grep recorder | wc -l);
# grep gbr3 estrae tutte le applicazioni interpretate da gambas3 runtime ...
# il grep successivo estrae quella specifica (in questo caso il recorder)
echo $recorder_running;
if [ "$recorder_running" -gt "0" ];
then
echo 'recorder is running ok';
#agite di conseguenza
else
echo 'recorder is NOT running!';
#agite di conseguenza
fi;
... i metodi "standard" che cercano il PID dell'applicazione non funzionano, perche' in realta' l'applicativo gambas e' interpretato ed i pid restituiti sono quelli dell'inteprete "gbr3".
Quale codice - in breve - hai utilizzato ?
Ad ogni modo ogni eseguibile .gambas lanciato avvia un diverso processo.
Fintanto che il processo è attivo, alcuni file di sistema creati dal processo continuano a esistere. Se il processo è stato terminato, quei file invece non saranno più esistenti.
Così per verificare l'attività di un eseguibile .gambas, si potrebbe proporre ad esempio questo codice:
Private Const NOME_ESEGUIBILE As String = "nome_del_programma_eseguibile.gambas"
Public Sub Main()
Dim tm As Date
tm = Now
' Verifica se esiste il file sistema "cmdline" del processo dell'eseguibile di cui verificare l'attività:
While Exist("/proc" &/ CStr(7041) &/ "cmdline")
' Se il predetto file di sistema "cmdline" esiste, allora vuol dire che l'eseguibile .gambas è ancora attivo:
Write "\r\e[32mL'applicazione " & Quote(NOME_ESEGUIBILE) & " ancora attiva. " &
Str(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)))
Wend
Write "\r\e[31mL'applicazione " & Quote(NOME_ESEGUIBILE) & " non è più attiva !\e[0m "
End