通过删除顶部显示的进程来清理一些内存

通过删除顶部显示的进程来清理一些内存

我的系统中有一个老用户(bob)。根据“top”的输出,似乎该用户运行了许多进程(其中大多数进程的命令是“java”)。由于我具有 root 访问权限,因此我删除了该用户,但进程仍然以用户“1000”的身份继续运行。如何停止这些进程永久运行?

答案1

如果您删除了用户,并且还删除了用户可能拥有的任何 cronjobs 等,那么重新启动系统应该会杀死它们的进程,而不会在系统再次启动时重新启动它们。

如果无法重新启动,您可以使用以下命令向属于 UID 1000 用户的所有进程发送终止信号

sudu pkill -u 1000

您可以通过首先运行来查看哪些进程会受到该命令的影响

pgrep -u 1000

也可以看看man pkill

答案2

首先,我将服务器所有进程的当前状态保存到一个文件中。

ps -wwfax -o uid=,pid=,ppid=,cmd=   > /root/list_of_process_as_today.txt

之后我将专注于我的不良用户。

ps -wwfax -o uid=,pid=,ppid=,cmd=  | sed '/^ *1000  *\([0-9][0-9]*\) .*$/p;d'

输出的示例可以是:

 1000  3096  3087      \_ sshd: em444@pts/0
 1000  3099  3096          \_ -bash
 1000  3543  3099              \_ ps -wwfax -o uid=,pid=,ppid=,cmd=
 1000  3544  3099              \_ sed /^ *1000  *\([0-9][0-9]*\) .*$/p;d
 1000 21628     1 SCREEN
 1000 21629 21628  \_ /bin/bash

进程列表分析

我当前的 shell 是进程 3099 。你可以看到一些子进程,我运行的命令3543,和一位家长3096

你可以看到我有进程21628,他的父进程是进程1, 过程1是所有进程的父进程。

之后我可以使用此命令来终止所有进程。

kill  $(/root/list_of_process_as_today.txt  | sed 's/^ *1000  *\([0-9][0-9]*\) .*$/\1/p;d')

相关内容