web-dev-qa-db-ja.com

Javaプロセスがrootユーザーとして実行されているかどうかを確認するスクリプト

現在、特定のJavaプロセス(ps -efl | grep Java)はルートとして実行されています。

現在、私は以下を思いついていますが、必要なものが印刷されていません、私が間違っている場所の提案はありますか?

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

このインスタンスでは、JavaプロセスはIntroscope_WebView.laxになります。これがrootユーザーとして実行されているかどうかを確認します。私ではなく、ルート。

1
John Barnes

pgrepの終了ステータスを直接テストできる必要があります。

if pgrep -u root -xf 'Introscope_WebView.lax' > /dev/null
then
    process_user="Root"
else
    process_user="Not Root"
fi

プロセスがまったく存在しない場合もprocess_user="Not Root"を設定することに注意してください-3つのケースすべてを実行したい場合(実行と所有はroot、実行は所有しているが他の誰かが所有、非実行)別のテスト。


例えば与えられた

$ ps -ef | grep [i]nit
root         1     0  0 Jan21 ?        00:00:05 /sbin/init splash

それから

$ if pgrep -xfu root '/sbin/init splash' >/dev/null ; then echo 'root owns it'; fi
root owns it

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.
4
steeldriver