J'essaie actuellement de créer un script pour vérifier si un processus spécifique Java (ps -efl | grep Java
) s'exécute en tant que root.
Actuellement, j'ai trouvé ce qui suit, mais il n'a pas imprimé ce dont j'ai besoin, des suggestions où je me trompe?
process_count=`pgrep -u root -x Introscope_WebView.lax;echo $?`
if [ "$process_count" -eq 1]
then
process_user="Root"
else
process_user="Not Root"
fi
echo "<metric type=\"LongCounter\" name=\"OS Processes|WebView User Process:Process Count\" value=\"$process_count\"/>"
echo "<metric type=\"StringEvent\" name=\"OS Processes|WebView User Process:Process User\" value=\"$process_user\"/>"
exit 0
Dans ce cas, le processus Java sera Introscope_WebView.lax et je veux vérifier si cela fonctionne en tant qu'utilisateur root. Si c'est le cas, donnez-moi 1 et exécutez root sinon, donnez moi d'autre et pas root.
Vous devriez simplement pouvoir tester directement l'état de sortie de pgrep
, par exemple.
if pgrep -u root -xf 'Introscope_WebView.lax' > /dev/null
then
process_user="Root"
else
process_user="Not Root"
fi
Notez que cela définira également process_user="Not Root"
si le processus n'existe pas du tout - si vous voulez couvrir les trois cas (en cours d'exécution et appartenant à root; en cours d'exécution mais appartenant à quelqu'un d'autre; pas en cours d'exécution), vous devrez ajouter un test distinct.
par exemple. donné
$ ps -ef | grep [i]nit
root 1 0 0 Jan21 ? 00:00:05 /sbin/init splash
ensuite
$ if pgrep -xfu root '/sbin/init splash' >/dev/null ; then echo 'root owns it'; fi
root owns it
De man pgrep
EXIT STATUS
0 One or more processes matched the criteria.
1 No processes matched.
2 Syntax error in the command line.
3 Fatal error: out of memory etc.