0

我正在使用 pstree 来获取一组进程,结果会像

进程A(123)---进程B(124)---进程C(125)---进程目标(126)---进程D(127)

我想使用关键字“processTarget”来获取 pid,即 126。

我之所以选择 pstree,是因为我会发送 SIGTSTP 信号和 SIGCONT 到这组进程。

我怎么能那样做?有没有容易做到的?

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

4

3 回答 3

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
于 2015-04-28T18:53:35.520 回答
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]+'

于 2015-04-28T18:52:00.867 回答
0

您可能会考虑sed

echo 'processA(123)---processB(124)---processC(125)---processTarget(126)---processD(127)' \ | sed 's/.*processTarget(\([0-9]*\)).*/\1/'
126
于 2015-04-28T18:59:28.690 回答