UNIX Shell脚本:与进程ID相关

时间:2015-04-09 06:37:54

标签: bash shell unix awk

我编写了一个shell脚本,它根据特定条件杀死进程。 我的剧本' A'会打电话给另一个剧本' B'它标识进程ID并将其杀死。

在运行脚本之前我已经运行了

ps -ef | grep processA

这给了我结果进程ID,比如11111

脚本B通过此命令获取进程ID

ps -ef|grep processA|grep -v stop|grep -v grep|awk ' { print $2 } '

我在脚本A中添加了相同的命令,并将进程ID设置为11111 但是,当它在脚本B中调用时,进程ID将不同,例如22222。 我不确定为什么即使它是相同的命令,所识别的进程ID也是不同的。对此有任何解释吗?

2 个答案:

答案 0 :(得分:0)

首先,您确定脚本A中的命令与脚本B中的命令相同吗?

其次,如果您对processA的PID感兴趣,可以

pgrep processA

将直接为您提供processA的PID。

第三,你想用命令实现什么

ps -ef | grep processA | grep -v stop | grep -v grep | awk '{ print $2 }'

看起来您正在寻找processA,但您只希望流程中不包含单词' stop'和' grep'。使用pgrep,你不会得到grep进程寻找processA。

如果您提供更多信息(例如您的脚本),我们可以为您提供更好的帮助。

答案 1 :(得分:0)

获取进程ID并将其杀死?这是另一种方式:

> proc_name=$1".pid"
> pid=$(cat /var/run/$proc_name)
> kill -9 $pid