Вот сценарий оболочки pgrep, который позволяет использовать pgrep и получать всех потомков одновременно.
~ / bin / pgrep_wrapper
:
#!/bin/bash
# the delimiter argument must be the first arg, otherwise it is ignored
delim=$'\n'
if [ "$1" == "-d" ]; then
delim=$2
shift 2
fi
pids=
newpids=$(pgrep "$@")
status=$?
if [ $status -ne 0 ]; then
exit $status
fi
while [ "$pids" != "$newpids" ]; do
pids=$newpids
newpids=$( { echo "$pids"; pgrep -P "$(echo -n "$pids" | tr -cs '[:digit:]' ',')"; } | sort -u )
done
if [ "$delim" != $'\n' ]; then
first=1
for pid in $pids; do
if [ $first -ne 1 ]; then
echo -n "$delim"
else
first=0
fi
echo -n "$pid"
done
else
echo "$pids"
fi
Вызвать так же, как и обычный pgrep, например pgrep_recursive -U $ USER java
, чтобы найти все процессы и подпроцессы Java из текущий пользователь.
Ответ находится в одном из "Related" вопросов, автоматически перечисленных stackexchange в правой колонке. Для эксперимента введите
bind '"\e[A": history-search-backward'
затем введите свою частичную команду и используйте клавишу со стрелкой вверх (которая должна генерировать escape [ A
]) для поиска этого частичного ввода в вашей истории. Подробнее см. в полном ответе.