使用shell脚本从pstree获取指定进程名的pid

时间:2015-04-28 18:47:49

标签: linux bash shell pstree

我正在使用pstree获取一组进程,结果将类似于

processA(123)---进程B(124)--- processC(125)--- processTarget(126)--- processD(127)

我想使用关键字" processTarget"获得pid,即126。

我选择pstree的原因是我将SIGTSTP信号和SIGCONT发送到这组过程。

我怎么能这样做?有什么容易做到的吗?

注意:processTarget(126)不在固定位置,因此我无法使用awk来获取PID。

3 个答案:

答案 0 :(得分:1)

参数扩展/子字符串提取非常简单。例如:

#!/bin/bash

##plist=$( pstree something )  # actual command to fill plist

plist="processA(123)---processB(124)---processC(125)---processTarget(126)---processD(127)"

temp="${plist##*processTarget(}"
ptgtnum="${temp%%)--*}"

printf "\n  processTarget = %s\n\n" "$ptgtnum"

exit 0

<强>输出

$ bash ptgt.sh

  processTarget = 126

答案 1 :(得分:0)

您可以使用grep

<pstree command> | grep -P -o 'processTarget\([0-9]+\)'

-P表示使用Perl正则表达式 -o表示仅返回匹配

man grep了解更多详情

如果目标只是获取id,你可以继续这种方法只返回整数

<pstree command> | grep -P -o 'processTarget\([0-9]+\)' | grep -P -o '[0-9]+'

答案 2 :(得分:0)

您可以考虑sed

echo 'processA(123)---processB(124)---processC(125)---processTarget(126)---processD(127)' \ | sed 's/.*processTarget(\([0-9]*\)).*/\1/'
126