使用 shell 脚本从 pstree 获取指定进程名称的 pid
get the pid of specified process name from pstree by using shell script
我正在使用 pstree 获取一组进程,结果会像
进程A(123)---进程B(124)---进程C(125)---进程目标(126)---进程D(127)
我想使用关键字"processTarget"来获取pid,即126。
之所以选择pstree,是因为我要给这组进程发送SIGTSTP信号和SIGCONT。
我该怎么做?有什么简单的方法吗?
注意:processTarget(126)不在固定位置,所以无法用awk获取PID。
您可以使用 grep
.
<pstree command> | grep -P -o 'processTarget\([0-9]+\)'
-P
表示使用 Perl 正则表达式
-o
仅表示 return 匹配
man grep
了解更多详情
如果目标只是获取 id,您可以继续使用此方法 return 仅获取整数
<pstree command> | grep -P -o 'processTarget\([0-9]+\)' | grep -P -o '[0-9]+'
使用 参数 expansion/substring 提取 非常容易。示例:
#!/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
您可以考虑 sed
:
echo 'processA(123)---processB(124)---processC(125)---processTarget(126)---processD(127)' \ | sed 's/.*processTarget(\([0-9]*\)).*//'
126
我正在使用 pstree 获取一组进程,结果会像
进程A(123)---进程B(124)---进程C(125)---进程目标(126)---进程D(127)
我想使用关键字"processTarget"来获取pid,即126。
之所以选择pstree,是因为我要给这组进程发送SIGTSTP信号和SIGCONT。
我该怎么做?有什么简单的方法吗?
注意:processTarget(126)不在固定位置,所以无法用awk获取PID。
您可以使用 grep
.
<pstree command> | grep -P -o 'processTarget\([0-9]+\)'
-P
表示使用 Perl 正则表达式
-o
仅表示 return 匹配
man grep
了解更多详情
如果目标只是获取 id,您可以继续使用此方法 return 仅获取整数
<pstree command> | grep -P -o 'processTarget\([0-9]+\)' | grep -P -o '[0-9]+'
使用 参数 expansion/substring 提取 非常容易。示例:
#!/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
您可以考虑 sed
:
echo 'processA(123)---processB(124)---processC(125)---processTarget(126)---processD(127)' \ | sed 's/.*processTarget(\([0-9]*\)).*//'
126