繁体   English   中英

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

[英]get the pid of specified process name from pstree by using shell script

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

processA(123)---进程B(124)--- processC(125)--- processTarget(126)--- processD(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM