Получить pid указанного имени процесса из pstree с помощью сценария оболочки
Я использую pstree, чтобы получить набор процессов, и результат будет
processA (123) --- processB (124) --- processC (125) --- processTarget(126) --- processD (127)
Я хотел бы использовать ключевое слово "processTarget", чтобы получить pid, то есть 126.
Причина, по которой я выбрал pstree, заключается в том, что я отправлю сигнал SIGTSTP и SIGCONT на этот набор процессов.
Как я мог это сделать? Легко ли это сделать?
Примечание: processTarget(126) не находится в фиксированном положении, поэтому я не мог использовать awk для получения PID.
3 ответа
Ты можешь использовать grep
,
<pstree command> | grep -P -o 'processTarget\([0-9]+\)'
-P
означает использовать Perl регулярное выражение-o
значит только вернуть матч
man grep
Больше подробностей
Если цель состоит в том, чтобы получить только идентификатор, вы можете продолжить этот подход, чтобы вернуть только целое число
<pstree command> | grep -P -o 'processTarget\([0-9]+\)' | grep -P -o '[0-9]+'
Это довольно легко с расширением параметра / извлечением подстроки. Пример:
#!/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]*\)).*/\1/'
126