Вот и все.Я не знал, что boot= был параметром, в отличие от исходного загрузочного каталога, содержащего initrd. Спасибо.
Хотяwait -n
(на комментарий @icarus )работает в этой конкретной ситуации, следует отметить, что $!
содержит PID последнего запущенного процесса. Так что вы можете проверить и это:
#!/bin/bash
find $HOME/Downloads -name "dummy" &
p1=$!
find $HOME/Downloads -name "dummy" &
p2=$!
find $HOME/Downloads -name "dummy" &
p3=$!
while true
do
if ps $p1 > /dev/null ; then
echo -n "p1 runs "
else
echo -n "p1 ended"
fi
if ps $p2 > /dev/null ; then
echo -n "p2 runs "
else
echo -n "p2 ended"
fi
if ps $p1 > /dev/null ; then
echo -n "p3 runs "
else
echo -n "p3 ended"
fi
echo ''
sleep 1
done
Но parallel
— лучший вариант.
I am trying to check how many active processes are running in a bash script. The idea is to keep x processes running and when one finished then the next process is started.
С GNU Parallel это выглядит так:
parallel -j3 find $HOME/Downloads -name {} ::: "name1" "name2" "name3"
Если вам нужно запускать разные программы (а не просто разные аргументы):
parallel -j3 ::: "find $HOME/Downloads -name name1" "find $HOME/Downloads -name name2" "find $HOME/Downloads -name name3"
Если команды более сложные, используйте функции bash:
find1() {
find $HOME/Downloads -name "name1"
}
find2() {
find $HOME/Downloads -name "name2"
}
find3() {
find $HOME/Downloads -name "name3"
}
export -f find1 find2 find3
parallel -j3 ::: find1 find2 find3
Если вы опустите -j3
, будет выполняться одно задание на ядро ЦП.