杀死一个用户的所有进程,除了 linux 中的少数进程

Tim*_*Tim 10 linux kill process

我正在远程服务器上的屏幕会话下运行一些进程。当我试图通过以下方式杀死所有这些进程时:

pkill -U tim
Run Code Online (Sandbox Code Playgroud)

我所有的进程都被杀死,包括那些我不想杀死的进程(即屏幕和 ssh 连接)。

有没有办法杀死除屏幕和 ssh 连接之外的所有进程?

Roy*_*ico 15

有点黑客:

ps -U tim | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill
Run Code Online (Sandbox Code Playgroud)

这将杀死除任何 ssh 或 screen 进程之外的所有内容。以下是解释的命令:

  • ps -U tim -- 显然,会列出用户 tim 的每个进程
  • egrep -v "ssh|screen" -- 将删除带有 ssh 或 screen 进程的行
  • cut -b11-15 -- 将剪切第 11-15 列中的数据(通常这是 PID 所在的位置)
  • xargs -t kill -- 将所有进程 ID 传递给 kill 命令

如果您更习惯使用 awk,也可以使用 awk。

ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill
Run Code Online (Sandbox Code Playgroud)


djh*_*ell 2

据我所知,没有任何内置内容。您可以创建这样的脚本:

#!/bin/bash
ps ux | sed -e '/bash/d' -e '/screen/d' | awk '{print $2}' | while read process
do 
  kill $process
done
Run Code Online (Sandbox Code Playgroud)

如果您想避免杀死任何其他进程,您只需要添加更多进程

-e '/processname/d'
Run Code Online (Sandbox Code Playgroud)

sed 部分的条目。可能有一种更干净的方法来处理它,但这会起作用。