URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8342
[ Назад ]

Исходное сообщение
"Немедленное или отложенное действие ^C ^Z"

Отправлено Vedmak , 09-Июл-09 01:21 
Добрый день,

4. В MS DOS, как известно, Control-Break распознается некоторыми функциями ввода. То есть мало того, что пользователь нажал CTRL-Break, при этом само по себе ничего не произойдет, программа еще не прервется и будет продолжать работу – надо, чтобы программа вызвала функцию чтения MS DOS с клавиатуры, поддерживающую обработку Ctr-Break (если был ctrl—break, из этой функции программа уже не вернется) :)
Во FreeBSD есть ^C и ^Z (suspend). Вопрос, они сразу действуют или как в MS DOS, т.е. надо, чтобы программа обратилась к терминалу? Какова внутренняя архитектура этих механизмов?

Все вопросы - http://unixvop.narod.ru/


Содержание

Сообщения в этом обсуждении
"Немедленное или отложенное действие ^C ^Z"
Отправлено VAK , 09-Июл-09 11:42 
что-то мне подсказывает ,что Вы глупости пишете.
CTRL-Break генерирует прерывание и если в программе есть обработчик такового
и если этот тип прерываний не запрещен и/или если программа для MSDOS
периодически смотрит на буфер клавиатуры, тогда программа и
среагирует соответствующим образом. А то, что для _некоторых_
функций ввода это прерывание обрабатывается-это заслуга тех, кто разрабатывал
эти функции. А не Ваша или Вашей программы :-).
И кстати, ^C под MSDOS тоже работает. В "некоторых функциях чтения".

Что касается *NIX и FreeBSD в частности...
У них тоже есть механизм прерываний, только называются они сигналами.
^C, ^Z и много-много разных... И послать их можно не только нажав на кнопки клавиатуры.
И эти прерывания программе посылает операционная система.
Посылает задаче сразу же. Без задержек, независимо от того, чем программа занята.
На то оно и прерывание ;-).
Как программа будет реагировать на эти сигналы - это как уж Вы напишите свою программу.
Может заблокировать их, может отложить реакцию...

Вообще, лучше Вам почитать что-нибудь... Например, замечательную книгу
Рочкинда "Программирование для UNIX". После этого все должно стать понятнее.

А про "сразу"... Это скорее философский вопрос ;-). О одновременности событий,
о параллельности в одноядерных CPU (например) и т.д.


"Немедленное или отложенное действие ^C ^Z"
Отправлено angra , 09-Июл-09 14:59 
Пару уточнений:
1. Прерывания и сигналы это очень разные механизмы.
2. SIGSTOP(это про ctrl+z), программа не может игнорировать/блокировать/отложить.

"Немедленное или отложенное действие ^C ^Z"
Отправлено Vedmak , 09-Июл-09 17:35 
>Пару уточнений:
>2. SIGSTOP(это про ctrl+z), программа не может игнорировать/блокировать/отложить.

А что значит не может отложить? Программа должна что-то сделать, обрабатывая этот сигнал, и только после этого уйдет в фон (jobs), или это уже от нее не зависит? Может этот сигнал программа не сама обрабатывает?


"Немедленное или отложенное действие ^C ^Z"
Отправлено const86 , 09-Июл-09 20:36 
>>2. SIGSTOP(это про ctrl+z), программа не может игнорировать/блокировать/отложить.
>А что значит не может отложить?

Она просто ничего не может сделать по этому поводу. Если STOP попал в процесс, то процесс останавливается сразу же без его ведома; не вызываются никакие обработчики. Аналогично с сигналом KILL, только его нельзя (или можно?) отправлять с терминала.


"Немедленное или отложенное действие ^C ^Z"
Отправлено Vedmak , 09-Июл-09 17:33 
>что-то мне подсказывает ,что Вы глупости пишете.

Ну, одна маленькая неточность. Я имел в виду, что прерывание будет сразу (если там нет прерываний более высокого приоритета), но программа снимется не сразу. Если не создавать процедуру обработки "Ctrl-Break...". Еще есть BREAK=ON (у Джордейна написано, что при этом вызов любой функции MS DOS будет проверять ctrl-break).

>А то, что для _некоторых_
>функций ввода это прерывание обрабатывается-это заслуга тех, кто разрабатывал
>эти функции. А не Ваша или Вашей программы :-)

я такого не писал, моя заслуга в том, что я вызову эти функции, а не другие.

>Посылает задаче сразу же. Без задержек, независимо от того, чем программа занята.

Посылает-то сразу... а что дальше происходит внутри команды man например?

>Вообще, лучше Вам почитать что-нибудь... Например, замечательную книгу
>Рочкинда "Программирование для UNIX". После этого все должно стать понятнее.

поищем. Но например в книге Теренса Чана "Системное программирование на C++ для Unix" нет даже определения демона.