LINUX.ORG.RU
ФорумAdmin

не могу второй раз отправить в фон скрипт

 


0

1

Есть скрипт, в нём устанавливаю свои обработчики сигналов, в частности сигнал Ctrl+z отправки в фон.


trap 'fynk ; kill -TSTP $$' SIGTSTP

В функции fynk возвращаю сигналы обратно в систему, командой:


trap - SIGTSTP

Как видно после выполнения функции fynk и в результате возврата сигнала в систему, выполняется команда:


kill -TSTP $$

которая опять посылает сигнал отправки в фон нашему скрипту (без этой команды после отправки в фон командная строка не возвращается).

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

Добавлено через 28 минут Например вот такой скрипт во второй раз в фон не отправляется:

#!/bin/bash
 
 
fynk1()
{
 
 trap - SIGTSTP
 return 0
 
}
 
fynk2()
{
 
 trap 'fynk1 ; kill -TSTP $$' SIGTSTP
 trap 'fynk2' SIGCONT
 echo "2222222222222"
 return 0
 
}
 
fynk2
 
while true
 do
   sleep 0
done

Почему то он не убивается и по ctrl+c.

★★

В man'е написано, что на обработку сигнала SIGTSTP влияет, включён ли job control, может дело в этом. А вобще, на bash'е как-то плохо с обработкой сигналов с помощью trap, уже и не помню, на что я натыкался, только решил, что лучше с этим не связываться.

mky ★★★★★
()

помоему у тебя бесконечный цикл получается в fynk2. ты в функции fynk2 вызываешь fynk2

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

По поводу примера который приведён здесь, на другом форуме подсказали заменить «sleep 0» на ":", помогло. Не знаю почему при «sleep 0» не работает, а при ":" работает. В моём реальном скрипте стоит конечно не «sleep 0» идут команды и т. д. поэтому на ":" не заменишь.

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

Не знаю почему при «sleep 0» не работает

Похоже, в баше какой-то непонятный баг (или непонятная фича?)

Почему-то сочетание sleep и комбинации клавиш ctrl+z при установке обработчика сигнала TSTP не хотят нормально работать. Причём, если посылать сигнал TSTP командой kill, то всё нормально, а если нажимать ctrl+z, то начинается какая-то хрень. Очень непонятно.

на другом форуме подсказали заменить «sleep 0» на ":"

А не мог бы кинуть сюда ссылку на тред в том форуме? Я бы почитал ответы и, возможно, задал доп. вопросы. Просто интересно разобраться, почему так.

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

У меня в текстовой консоли 80x25 и в графическом эмуляторе картина одинаковая. Сейчас стало по ctrl+z и с первого раза в фон не уходить. По сигналу то уходит в фон то нет. Бывает при первом нажатии ctrl+z уходит в фон, потом возвращаю его и при втором нажатии ctrl+z не уходит в фон, при этом появляется второй такой же процесс. Тот что на переднем плане не прекращает работу даже при нажатии ctrl+c по сигналу TSTP он уже не уходит в фон, прекращает работу только по сигналу TERM.

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

Сейчас стало по ctrl+z и с первого раза в фон не уходить.

Ну, справедливости ради, по ctrl+z оно приостанавливается, а не продолжает работать в фоне. После этого надо ввести команду

bg N_задания
для возобновления работы в фоне либо
fg N_задания
для возобновления работы на переднем плане. Но это так, к слову.

Мне вообще кажется, что дело тут в каких-то сбоях клавиатурных сочетаний для терминала, а не в самих сигналах, хотя на 100% утверждать это пока не готов.

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