Mat*_*att 6 unix bash shell grep
我有一个运行 Red Hat 6.8 的 Docker 容器,并且有几个正在运行的 Java 进程。在具有相同操作系统的其他计算机上,我使用了类似于以下的命令来查找并终止所有 Java 进程:
ps -ef | grep 'java' | grep -v 'grep' | awk '{print $2}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
但是,在这台机器上,它给了我以下错误:
xargs: kill: No such file or directory
Run Code Online (Sandbox Code Playgroud)
取消“| xargs Kill -9”确实有效,并向我显示了我想要杀死的进程的 PID,但由于某种原因,该命令无法同时工作。
有人知道为什么吗?
小智 5
当前的问题是xargs找不到kill命令。它需要在您的 中PATH,可能在/bin和/或 中/usr/bin。kill当您直接从 shell运行命令时,您不会注意到它丢失了,因为大多数 shell 都有kill内置命令。
另外,我同意其他用户对总体想法的评论。有较少的黑客方法可以做到这一点(killall,,pkill任何不涉及grep依靠运气来避免匹配`ps输出的错误部分的东西......)