我目前正在尝试修改一个shell脚本,这将允许我检查一个进程是否正在运行正确的用户(root)
我认为我首先要使用ps -efl& grep用于进程以及是否以root = 1运行,否则= 0?
答案 0 :(得分:1)
如果您知道流程的名称(例如watch
):
ps -C watch -o uid=
#=> 0
ps -C watch -o ruser=
#=> root
如果你知道pid:
ps -p 4793 -o uid=
0
ps -p 4793 -o ruser=
#=> root
您只需要检查uid
(0表示root用户名)或用户名。
答案 1 :(得分:0)
您可以使用pgrep,默认情况下通常在大多数发行版中都可用:
$ pgrep -a -u root -x geany;echo $?
2794 geany tuesday.txt
0
$ pgrep -a -u root -x gean;echo $?
1
使用-x选项进行精确匹配,否则进程名称将被视为模式:
$ pgrep -a -u root gean;echo $?
2794 geany tuesday.txt
0
如果找到流程,则返回代码($?)为0,如果未找到则返回1.
要仅保留返回代码而不保留进程名称/信息(如果进程已启动并以root身份运行),您可以将pgrep输出重定向到/ dev / null:
$ pgrep -a -u root geany 1>/dev/null;echo $?
0