SHELL бесконечный сон в ожидании сигналов

Модератор: Модераторы разделов

Ответить
64-coreCPU
Сообщения: 10

SHELL бесконечный сон в ожидании сигналов

Сообщение 64-coreCPU »

Пишу минмальную систему инициализации под свои задачи. Есть небольшой shell-скрипт, который должен запустить несколько фоновых процессов и уснуть до получения сигнала. Есть несколько вариантов.
Вариант 1

Код: Выделить всё

#!/bin/bash

#ставлю обработчик сигнала
trap "echo ' signal got'" INT

#дальше запускаю фоновые задачи
#тут будет код запуска фоновых задач

#ухожу в сон и жду "прерывания"
sleep infinity

#при получении сигнала сон прерывается и скрипт продолжается
echo "Exiting"
Смущает то, что sleep infinity в манах нет. Да и в сети всего пара сайтов нашлось, где об этом упоминается.

Вариант 2

Код: Выделить всё

#!/bin/bash
echo "My pid is $$"

#запускаю фоновые задачи
#тут будет код запуска фоновых задач

#посылаю сам себе  SIGSTOP
kill -SIGSTOP $$

#при получении сигнала SIGCONT сон прерывается и скрипт продолжается

echo "Exiting"
Такой вариант хорош, но мне не нравится то, что для его пробуждения придётся посылать конкретно SIGCONT. Sleep пробуждает от любого сигнала.

Есть ещё и третий вариант

Код: Выделить всё

#!/bin/bash

#ставлю обработчик сигнала
trap "echo ' signal got'" INT

#дальше запускаю фоновые задачи
#тут будет код запуска фоновых задач

#ухожу в сон и жду "прерывания"
while true; do sleep 86400;  done

#при получении сигнала сон прерывается и скрипт продолжается

echo "Exiting"
Минус этого варианта в том, что придётся городить велосипед в цикле с проверками причины - закончился ли таймер или был получен сигнал.

Вот сижу и думаю, какой вариант использовать. Есть идеи? По шелл-портянкам я не спец, так что особо не ругайте.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: SHELL бесконечный сон в ожидании сигналов

Сообщение Bizdelnick »

64-coreCPU писал(а):
12.01.2022 23:57
Смущает то, что sleep infinity в манах нет. Да и в сети всего пара сайтов нашлось, где об этом упоминается.
https://www.gnu.org/software/coreutils/manual/html_node/sleep-invocation.html#sleep-invocation
Если скрипт для системы с GNU coreutils, то можно такое использовать, если это заранее неизвестно — то не стоит.
64-coreCPU писал(а):
12.01.2022 23:57
По шелл-портянкам я не спец, так что особо не ругайте.
Тогда представьте себе, что это не «шелл-портянка», а программа на любом другом языке. Разницы, на самом деле, никакой. Запустили дочерние процессы — что обычно делают? wait. Заодно и события непредвиденного завершения этих процессов обработаете.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
64-coreCPU
Сообщения: 10

Re: SHELL бесконечный сон в ожидании сигналов

Сообщение 64-coreCPU »

А вот за эту ссылку реально спасибо. Значит выбор мой однозначный - sleep inf.
Спасибо сказали:
Ответить