Вызов ls в захваченном сигнале SIGUSR1 приводит к нежелательному выходу из оболочки - PullRequest
3 голосов
/ 20 мая 2019

Я пытаюсь устранить неполадки в примере, касающемся прерываний сигналов bash-скрипта, данных во время лекции. Я скопировал и вставил код в скрипт, но его выполнение приводит к нежелательному и неожиданному выходу из системы в конце. Инструктор не упоминает, что это может произойти, и у меня сложилось впечатление, что этого не должно быть. Однако после того, как я не смог связаться с моими ТА и сокурсниками, я обращаюсь к вам за помощью!

Полный слайд, который я рассматриваю, можно найти на странице 15 здесь: http://web.engr.oregonstate.edu/~brewsteb/CS344Slides/3.3%20Signals.pdf

Ожидаемый результат :

Triggering a child process termination with a silent ls SIGCHLD Received!
Exiting! [1]+  Done                    sigchldtest

Фактический результат :

Triggering a child process termination with a silent ls
os1 ~/344_operating_systems/examples 1062$ SIGCHLD Received! Exiting!
logout

---------------

Сценарий, sigchldtest:

#!/bin/bash
set -m trap "echo 'Triggering a child process termination with a silent ls'; ls > /dev/null" USR1
trap "echo 'SIGCHLD Received! Exiting!'; exit 0" CHLD

while [ 1 -eq 1 ]
do
    echo "nothing" > /dev/null
done

Консольный ввод:

sigchldtest &
kill -SIGUSR1 [sigchldtest pID]

Выполненные шаги

  • Удалено «ls> / dev / null» из строки 3. Код выполняется, но не вызывает прерывание сигнала CHLD, как и ожидалось.

  • Удален «выход 0» из строки 4. Оболочка не выходит из системы после завершения, но пользователь должен нажать «ввод», чтобы вернуться в командную строку, и сценарий продолжает работать в фоновом режиме (не желательно). Кроме того, имя пути не должно быть напечатано до «SIGCHLD Received!». Похоже, что командная строка активируется в середине моего скрипта?

Triggering a child process termination with a silent ls
os1 ~/344_operating_systems/examples 1010$ SIGCHLD Received! Exiting!
{USER MUST PRESS ENTER HERE}
$
  • Попытка процесса в консоли PuTTY и Windows 10. Результат один и тот же.
  • Попытка убить процесс в другом терминале за Ferrybig . Уничтожение процесса во втором терминале вышло из первого, лол! attempting to kill process in second terminal

Спасибо за ваше время!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...