我正在使用 pstree 来获取一组进程,结果会像
进程A(123)---进程B(124)---进程C(125)---进程目标(126)---进程D(127)
我想使用关键字“processTarget”来获取 pid,即 126。
我之所以选择 pstree,是因为我会发送 SIGTSTP 信号和 SIGCONT 到这组进程。
我怎么能那样做?有没有容易做到的?
注意:processTarget(126) 不在固定位置,因此我无法使用 awk 获取 PID。
使用参数扩展/子字符串提取这很容易。例子:
#!/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
您可以使用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]+'
您可能会考虑sed
:
echo 'processA(123)---processB(124)---processC(125)---processTarget(126)---processD(127)' \ | sed 's/.*processTarget(\([0-9]*\)).*/\1/'
126