我目前正在尝试创建一个脚本来检查特定的 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.