LINUX.ORG.RU

Усыпить процесс

 


0

1

Есть маленький скрипт на bash. Как его остановить но что бы он реагировал на сигналы. Пробовал sleep - не годится, рождает дочерние процессы. Пробовал посылать сам себе сигнал SIGSTOP - то же не годится, после этого реагирует только на сигнал SIGCOUNT. Есть ещё какие варианты?

Если хочешь не порождать дочерние процессы, то сможешь юзать только встроенные команды баша. Среди них, ЕМНИП, того, что ты хочешь, нет. Только если на IO каком-нибудь заблокироваться, выше уже предложили read.

devsdc ★★
()
Ответ на: комментарий от inoremap

Не подходит. По действию работает так же как послать себе сигнал SIGSTOP. То есть не реагирует на сигналы кроме SIGCONT

sergijoo
() автор топика
Ответ на: комментарий от devsdc

Жрать процессорное время низачем как-то грустно.

Ничего он жрать не будет, т.к. ничего не делает - цикл-то пустой.

Это если процесс, делающий read, запущен не в foreground

Судя по вопросу ТСа ему как раз и надо, чтобы скрипт крутился в background.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Ничего он жрать не будет, т.к. ничего не делает - цикл-то пустой

поясни

anonymous
()
Ответ на: комментарий от no-such-file

Ничего он жрать не будет, т.к. ничего не делает - цикл-то пустой.

Будет проверять условие выхода из цикла. Или nop. man busy waiting, короче.

Судя по вопросу ТСа ему как раз и надо, чтобы скрипт крутился в background.

Ну тогда никак, если не спавнить дочерние процессы. В man 3 signal есть всякие отсылки к функциям, усыпляющим процесс до сигнала, но в баше я аналога не знаю. Если уж совсем тухло, можно написать простую утилиту на сях, которая будет просто ждать сигнала, но это, повторюсь, дочерним процессом будет спавниться.

devsdc ★★
()

Очередной топик-эталон о фантазиях автора. Какой ты былинный костыль задумал для решения своей задачи, думаю, уже все поняли и прониклись мощью твоего энтилекта. Пора и саму задачу уже бы озвучить

zolden ★★★★★
()
Ответ на: комментарий от devsdc

Ну тогда никак

Ну что уж сразу и никак. Можно создавать fifo в tmp и ждать на нем, или как вариант использовать загружаемый встроенный sleep (есть такая фича в bash), или не использовать баш, а перейти например на perl. Но всё это требует дополнительных телодвижений.

busy waiting

Он самый. Зато просто и если ТС не собрался запускать свой скриптик в режиме 24/7 - вполне приемлемо.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Так busy waiting же на то и busy waiting, что зря жрёт процессорное время, я об этом.

загружаемый встроенный sleep

А где про это почитать можно? В man bash ничего нет на эту тему.

devsdc ★★
()
Ответ на: комментарий от no-such-file

И жри процессор под 100%. Нет уж, спасибо.

sergijoo
() автор топика
Ответ на: комментарий от devsdc

Ну так скрипт запускается при входе в систему, какой ещё может быть foreground

sergijoo
() автор топика
Ответ на: комментарий от nanoolinux

wait ждет завершения дочерних процессов, при чём он здесь?

sergijoo
() автор топика
#!/bin/sh

test1() {
 echo Hi!
}

trap test1 USR1

sleep infinity &
wait $!
kill $!

echo Bye!

sleep infinity работает у меня, но нигде в мане об этом не написано

Nao ★★★★★
()
Последнее исправление: Nao (всего исправлений: 2)
Ответ на: комментарий от sergijoo

поподробнее

А что поподробнее? Берёшь perl, изучаешь, переписываешь скриптик. Всё. sleep в перле есть.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.