sudo Kill 导致权限被拒绝

dra*_*oul 2 ubuntu

ps -辅助 | grep 节点结果:

root      2814  0.0  0.0   4344     0 ?        S    Mai27   0:00 sh -c node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js
root      2815  0.0  0.0 1358316 1096 ?        Sl   Mai27   0:17 node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js
root      2881  0.0  0.0   4344     0 ?        S    Mai27   0:00 sh -c npx webpack --mode development && node ./build/bundle.js
root      2910  0.0  0.7 1262156 63004 ?       Sl   Mai27   0:47 node ./build/bundle.js
Run Code Online (Sandbox Code Playgroud)

sudo kill 2814 2815 1881 2910结果导致权限被拒绝。

我知道,如果sudo用户不是您执行任务的用户,则在没有拒绝权限的情况下运行它是有意义的。但是,在这里我没有任何线索,有人可以解释为什么有时不能用 杀死根进程吗sudo?这有什么意义吗?(特别是,因为这只是我自己项目的一个webpack过程,所以我不太明白。)

Tre*_*ing 7

由于您使用的是 Linux (Ubuntu) - 如果sudo kill仍然给出permission denied,则可能是因为您正在容器化应用程序(例如 Snap 应用程序)内运行,例如 VSCode 的集成终端。尝试sudo kill从不是 Snap 应用程序的另一个终端运行,例如 Alacritty、gnome-terminal、Konsole 等。


更多信息:

这些类型的容器化应用程序(Snap、Flatpak 等)通常受到AppArmor配置文件的限制,这些配置文件会阻止进行某些系统调用(也称为“系统调用”)。

kill命令通过进行系统调用来工作signal()。如果signal系统调用被应用于您正在使用的终端的 AppArmor 配置文件阻止,则可能会导致权限被拒绝。

您可以通过检查内核日志(运行命令dmesg)来检查是否发生这种情况。例子:

[ 6405.232002] audit: type=1400 audit(1658415742.446:231): apparmor="DENIED" operation="signal" profile="docker-default" pid=89218 comm="kill" requested_mask="receive" denied_mask="receive" signal=kill peer="snap.code.code"
Run Code Online (Sandbox Code Playgroud)

错误消息的关键部分是:apparmor="DENIED" operation="signal" ... signal=kill。这意味着 AppArmor 正在阻止signal试图终止进程的系统调用。