用于终止除用户拥有的进程之外的进程的 Shell 脚本

用于终止除用户拥有的进程之外的进程的 Shell 脚本

我正在寻找一些帮助来创建脚本来终止进程,但如果它们由 root 拥有,则返回错误消息。首先我想说我在这方面完全是初学者。目前我有:killps -aef | grep $1 | grep -v grep | awk '{print $2}'可以很好地杀死作为参数的进程名称。但我无法让它作为 if 语句工作,以阻止它在所有者是 root 的情况下杀死进程。

答案1

pgrep -u 0 "$1" && echo "Can't kill process: Owned by root" || killall "$1"

pgrep -u 0仅搜索UID 0(root) 拥有的进程。如果未找到该进程(因此该进程不存在或未以 root 身份运行),prgep 将返回非零返回代码,并且killall将执行该命令。如果 prgrep 返回零返回代码,则将执行 echo,但不会执行 Killall 命令。

答案2

尝试

ps -aef | grep $1 | egrep -v grep | awk '$1 != "root" {print $2}'

该语句$1 != "root"将过滤掉 root 拥有的进程。您可能仍然会在守护进程上遇到错误(例如,www-data如果您正在运行 apache)。

相关内容