首页 > 解决方案 > 捕获子进程ID并将其保存到文件中以杀死它

问题描述

我正在创建一个自动脚本,我想每隔一小时杀死这个 jar 文件的进程。

我想捕获这个进程并将使用文件中的 kill -9 进程。我几乎实现了它,但实现了 16457 和 9845(字符不能每次都相同,有时 5 个字符进程 id 有时可能不同。)所以我使用的 sed 命令无法正常工作。

如果请查看并建议我如何捕获此进程 ID,而不管字符。

[tresouser@localhost ~]$ ps -ef|grep treso.jar
tresouser    16457      1  0 13:40 ?        00:00:00 /u02/jarloc/treso/treso.jar 
tresouser    88861  88807  0 13:41 pts/2    00:00:00 grep treso.jar
[tresouser@localhost ~]$ ps -ef|grep treso.jar
tresouser     9845      1  0 12:40 ?        00:00:00 /u02/jarloc/treso/treso.jar 
tresouser    88861  88807  0 12:45 pts/2    00:00:00 grep treso.jar

标签: shellscripting

解决方案


我认为您正在寻找以下内容:

ps -C -o pid,comm |grep treso.jar |awk -F '[[:space:]]+' '{print $2}'

让我们用一些解释来分解它......

ps -C -o pid,comm

这将列出所有进程和相关命令(如果要根据命令和参数进行过滤,comm可以换掉)command

|grep treso.jar

这将过滤掉任何不包含的命令treso.jar

|awk -F '[[:space:]]+' '{print $2}'

这将根据空格拆分列,然后我们获取第二列并打印它(PID 之前有一个空格,所以第一列是空白的)


推荐阅读