我的系统中有一个老用户(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')