杀死过去一小时内启动的所有进程?

杀死过去一小时内启动的所有进程?

如何终止使用我的用户名在(过去一小时、过去一天)等内启动的所有进程?

答案1

  1. 找到不到一个小时的进程
  2. 提取pid
  3. 杀死pids

进程列表:

$ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me && $3 <= 3600 { print }'

生产

 661162 jaroslav    3006 chrome
 667859 jaroslav    1711 chrome
 669145 jaroslav    1471 chrome
 671222 jaroslav    1016 chrome
 675278 jaroslav     270 chrome
 675578 jaroslav     207 sleep
 676094 jaroslav      91 chrome
 676102 jaroslav      91 chrome
 676528 jaroslav      11 chrome
 676529 jaroslav      11 chrome
 676553 jaroslav      11 chrome
 676602 jaroslav       3 top
 676615 jaroslav       0 ps
 676616 jaroslav       0 awk

提取pid:

$ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }'

杀死pid:

 $ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }' \
    | xargs -rt kill

xargs 的 -tr 参数是可选的,如果没有输出并报告每个执行的行,则将跳过 xargs。

您甚至可以测试它,kill -0它不会停止进程,但如果进程不再运行,则会报告错误。

$ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me  && $3 <= 3600 { print $1 }' \
    | xargs -rt kill -0 
kill -0 661162 667859 669145 671222 675278 676602 677310 677311 677883 677893 677965 677966 677967 677968
kill: (677966): No such process
kill: (677967): No such process

意识到这个管道/脚本可以在反馈后自行终止(注意上面进程列表中的 etimes=0),这里是一个忽略最近进程的修订版本:

ps -u "$LOGNAME" -o pid,etimes,comm \
  | awk '$2 <= 3600 && $2 > 1 { print $1 }' \
  | xargs -rt kill -0

这可能不太便携,但应该可以在 Linux 上运行(至少 ubuntu 18)。希望这能让您了解如何解决这个问题。

<mother-mode> 请在不使用 awk 和 xargs 的情况下运行 ps 命令,然后先杀死以查看将杀死哪些内容,如果以 root 身份运行,请小心。您可能会关闭系统或终止最近重新启动的某些重要服务。 </mother-mode>

相关内容