首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解LINUX或AIX系统上的pts/1服务

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

Stack Overflow用户
提问于 2014-12-27 03:21:57
回答 2查看 284关注 0票数 2

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

代码语言:javascript
复制
ps -fu user_name | grep java | awk '{print $2}' | xargs kill -9`

并检查echo $?是否返回0

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

代码语言:javascript
复制
ps -fu user_name | grep java

然后它又回来了

代码语言:javascript
复制
user_name      31970 31630  0 11:06 pts/1    00:00:00 grep java

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

代码语言:javascript
复制
ps -fu user_name | grep java | awk '{print $2}' | xargs kill -9

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

有人能解释一下这是怎么回事吗?我怎样才能确保所有的java进程都被成功地杀死了(如果pts/1还活着也没问题)?

EN

回答 2

Stack Overflow用户

发布于 2014-12-27 03:37:18

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

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

代码语言:javascript
复制
ps -fu user_name | grep java | grep -v grep | awk '{print $2}' | xargs kill -9

另一种是使用一个技巧:

代码语言:javascript
复制
ps -fu user_name | grep '[j]ava` | awk '{print $2}' | xargs kill -9

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

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

票数 3
EN

Stack Overflow用户

发布于 2014-12-27 06:36:49

正如@Barman建议的那样,你可以使用pkillkillall,如果你的系统中有它,那肯定是最好的选择,而不是更昂贵的管道。

使用pkill

使用pkill,您可以向所有匹配模式的进程发送信号。

模式:

指定用于匹配进程名称或命令行的扩展正则表达式。

代码语言:javascript
复制
pkill -u user_name -9 java

注意:在执行pkill之前,您可以使用pgrep检查要终止的pids

使用pgrep获取pids

您可以先用pgrep查看匹配的pids,检查步骤如下:

代码语言:javascript
复制
pgrep -u user_name java

如果您不关心性能(何乐而不为呢?),您可以通过管道传输这些pids,并使用xargs向它们发送信号:

代码语言:javascript
复制
pgrep -u user_name java | xargs kill -9

或者,您也可以使用Command Substitution执行相同的操作

代码语言:javascript
复制
kill -9 $(pgrep -u user_name java)

使用killall

除了pkill,您还可以使用killall。默认情况下,killall不像pkill那样通过扩展正则表达式匹配名称。因此,如果您想模拟更接近pkill的行为,则必须指定-r选项:

代码语言:javascript
复制
killall -r -u user_name -9 java

检查成功

假设您选择pkill向进程发送信号。如果您想在命令成功后执行某些步骤,只需将其放入一条if语句中:

代码语言:javascript
复制
if pkill -u user_name -9 java; then
    step_1
    step_2
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27661053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档