Вот решение с помощью только повсеместные инструменты оболочки.
Это должно быть легко сделано путем разветвления медленного процесса и a sleep
в фоновом режиме и ожидание первого для окончания, за исключением того, что wait
встроенная оболочка ожидает всех заданий для окончания, а не только первого.
Таким образом вместо этого, разветвите медленный процесс и a sleep
в фоновом режиме имейте их обоих, сообщает их состояние через канал и читает первое состояние, которое выходит из канала.
fifo=$(mktemp -u) # if not on Linux, adapt to what your OS provides
mkfifo -m 600 "$fifo"
{ ./slowprocess.sh; echo z >"$fifo"; } &
sh -c 'sleep 3; echo a' >"$fifo" &
sleep_pgid=$!
read status <$fifo
case $status in
a) echo "That process is taking a long time"; read ignored <$fifo;;
z) echo "Done already"; kill -INT -$sleep_pgid;;
esac
rm "$fifo"
Я не видел явного утверждения об этом, и я не дал это попробовать, но я думаю, что это не нужно. В дополнение к моему предположению, на страницах человека говорится:
KEXEC выполняет функцию загрузчика загрузчика из ядра.
Адаптация нагрузки ядра, будет необходима только в том случае, если бы некоторая черная магия вместо процедуры загрузочного загрузчика была вовлечена, но нет, если запускное ядро делает Samle, как загрузочный загрузчик.