gpt4 book ai didi

linux - 了解 LINUX 或 AIX 系统上的 pts/1 服务

转载 作者:太空狗 更新时间:2023-10-29 11:44:17 24 4
gpt4 key购买 nike

我正在尝试终止由特定用户运行的所有 java 进程。然后我想检查所有 java 服务是否已成功停止,并基于此我想执行某些步骤。在我的脚本中我使用了

ps -fu user_name | grep java | awk '{print $2}' | xargs kill -9`

并检查 echo $? 是否返回 0

我尝试在我的 Linux/AIX 服务器上手动运行以下命令:

ps -fu user_name | grep java

它返回了

user_name      31970 31630  0 11:06 pts/1    00:00:00 grep java

之后我执行了echo $?,它返回了0。接下来,我尝试通过执行以下命令来终止 java 服务:

ps -fu user_name | grep java | awk '{print $2}' | xargs kill -9

它给出了 kill 32230: No such processecho $? 返回 123 而不是 0

谁能解释一下发生了什么,我如何确保所有 java 进程都被成功终止(如果 pts/1 还活着就没问题)?

最佳答案

正如您在第二个命令中所见,grep java 匹配 grep 进程本身,因为它的参数中包含 java。但是当 kill 运行时,grep 已经完成,所以你不能杀死它。

有两种常见的方法可以解决这个问题。一种是过滤掉grep:

ps -fu user_name | grep java | grep -v grep | awk '{print $2}' | xargs kill -9

另一种是使用技巧:

ps -fu user_name | grep '[j]ava` | awk '{print $2}' | xargs kill -9

这会阻止 grep 命令匹配自身,因为参数包含额外的 [] 字符,所以它不匹配模式。

请注意,大多数 Linux 发行版都有 killall 和/或 pkill 命令,它们允许您按名称终止进程,因此您不需要自己编写代码。

关于linux - 了解 LINUX 或 AIX 系统上的 pts/1 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com