检查 Java 进程是否以 root 用户身份运行的脚本

检查 Java 进程是否以 root 用户身份运行的脚本

我目前正在尝试创建一个脚本来检查特定的 java 进程(ps -efl | grep java)是否以 root 身份运行。

目前我已经想出了以下内容,但它还没有打印出我需要的内容,有什么建议我哪里做错了吗?

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 并运行 root,否则给我 else 而不是 root。

答案1

你应该能够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"请注意,如果进程根本不存在,这也将设置- 如果您想涵盖所有三种情况(正在运行并由 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.

相关内容