我有一些特定用户使用的资源,我必须删除这些资源,因为它从服务器占用了大量资源。当我列出服务器中的进程时,已删除的用户现在显示为“1001”,而不是删除之前显示的名称。
%Cpu(s): 19.8 us, 29.5 sy, 0.0 ni, 50.7 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 3882456 total, 183568 free, 2003808 used, 1695080 buff/cache
KiB Swap: 1679356 total, 1155300 free, 524056 used. 1463480 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9192 1001 20 0 2068436 74700 10284 S 0.3 1.9 3:02.86 node
通过使用systemctl status
我发现用户正在执行的进程和 docker 容器 ID 位于:
├─docker
│ ├─42b40e73687acb7fcd9a0e43372ced7588b5568c942f740d06510ab0e85b1462
│ │ ├─17156 /bin/sh -e /usr/local/sbin/start.sh
└─11148 node --debug --nolazy dist-release/server
因此,我进入容器并查看 start.sh 文件,但它只是一个可执行文件,文件内部没有任何迹象表明用户正在可执行文件内部被调用。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
apiassets_1
42b40e73687a local.io/api-statements:development "start.sh" 21 hours ago Up 18 hours 0.0.0.0:32785->3000/tcp, 0.0.0.0:5966->5858/tcp
我想要做的是阻止该用户使用该资源,所以我只是好奇如何找到该用户如何调用该脚本来停止它,或者如何停止它。
答案1
仅供关注我的问题的任何人使用。发生的事情有点奇怪,但是运行该进程的用户恰好在 docker 容器内具有与主机相同的 ID,因此当我列出所有进程时,容器内用户的用户 ID 正在获取映射到我在主机中拥有的特定用户。这解释了为什么当我删除主机中的用户时,我仍然看到该进程以“1001”运行。
所以,现在我很清楚它应该是这样运作的。
我也看了这个工具叫系统数据库如果有人感兴趣,这似乎可以解决像我遇到的问题,因为它会为您提供有关每个容器的具体信息。就我而言,我看到主机和容器中发生的进程,因此很难真正检查正在发生的情况。