The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Запрет прерывания работы скрипта"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Запрет прерывания работы скрипта" 
Сообщение от San emailИскать по авторуВ закладки(??) on 08-Дек-05, 16:43  (MSK)
Можно ли как-то запретить пользователю прерывать работу,
например, команды sleep посредством нажатия Ctrl+C или
любых других прерывающих комбинаций с клавиатуры?
  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "Запрет прерывания работы скрипта" 
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 08-Дек-05, 16:49  (MSK)
>Можно ли как-то запретить пользователю прерывать работу,
>например, команды sleep посредством нажатия Ctrl+C или
>любых других прерывающих комбинаций с клавиатуры?

Я так думаю, можно развесить соответствующие сигнальные обработчики и производить обработку ситуации, продолжая прерванный sleep. Но все равно можно будет прибить по kill -9 :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Запрет прерывания работы скрипта" 
Сообщение от San emailИскать по авторуВ закладки(??) on 08-Дек-05, 16:53  (MSK)
>>Можно ли как-то запретить пользователю прерывать работу,
>>например, команды sleep посредством нажатия Ctrl+C или
>>любых других прерывающих комбинаций с клавиатуры?
>
>Я так думаю, можно развесить соответствующие сигнальные обработчики и производить обработку ситуации,
>продолжая прерванный sleep. Но все равно можно будет прибить по kill
>-9 :)

А можно конкретный пример? Как запретить комбинацию Ctrl+C ?
PS: Про килл -9 ясно.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Запрет прерывания работы скрипта" 
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 08-Дек-05, 17:11  (MSK)
>>>Можно ли как-то запретить пользователю прерывать работу,
>>>например, команды sleep посредством нажатия Ctrl+C или
>>>любых других прерывающих комбинаций с клавиатуры?
>>
>>Я так думаю, можно развесить соответствующие сигнальные обработчики и производить обработку ситуации,
>>продолжая прерванный sleep. Но все равно можно будет прибить по kill
>>-9 :)
>
>А можно конкретный пример? Как запретить комбинацию Ctrl+C ?
>PS: Про килл -9 ясно.

Ну вот на скорую руку пример с точностью до секунды. Запрета прерывания sleep'а это не дает, зато ctrl-c не останавливает программу, а прерванный sleep всегда можно продолжить. Думаю, общий смысл ясен:

#!/bin/sh

trap 'echo "Не нада тыкать Ctrl+C! ;)"' INT
# ^C или kill -2

TIMEOUT=10

start_time=`date '+%s'`
while (true)
do
  sleep 1
  delta=$((`date '+%s'`-$start_time))
  if [ $delta -ge $TIMEOUT ]
   then
    break
   fi
done

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Запрет прерывания работы скрипта" 
Сообщение от Dimm Искать по авторуВ закладки(??) on 08-Дек-05, 17:23  (MSK)
>Можно ли как-то запретить пользователю прерывать работу,
>например, команды sleep посредством нажатия Ctrl+C или
>любых других прерывающих комбинаций с клавиатуры?

к примеру
trap '' 1 2 3

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Запрет прерывания работы скрипта" 
Сообщение от San emailИскать по авторуВ закладки(??) on 08-Дек-05, 19:49  (MSK)
>>Можно ли как-то запретить пользователю прерывать работу,
>>например, команды sleep посредством нажатия Ctrl+C или
>>любых других прерывающих комбинаций с клавиатуры?
>
>к примеру
>trap '' 1 2 3

Спасибо!
Сделал вот так:
---
trap '' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
read -s -p "press any key to exit" -t 15 -n 1
---

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Запрет прерывания работы скрипта" 
Сообщение от jd Искать по авторуВ закладки(??) on 08-Дек-05, 21:02  (MSK)
>Сделал вот так:
>---
>trap '' 1 2 3 4 5 6 7 8 9 10
>11 12 13 14 15 16 17 18 19 20 21
>22 23 24 25 26 27 28 29 30 31 32
>
>read -s -p "press any key to exit" -t 15 -n 1
>
>---

Да, но всё же SIGKILL и SIGSTOP перехватить вам не удастся...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Запрет прерывания работы скрипта" 
Сообщение от Dimm Искать по авторуВ закладки(??) on 08-Дек-05, 21:24  (MSK)
>>---
>
>Да, но всё же SIGKILL и SIGSTOP перехватить вам не удастся...

а эти сигналы разве можно с клавиатуры вызвать?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Запрет прерывания работы скрипта" 
Сообщение от San emailИскать по авторуВ закладки(??) on 08-Дек-05, 21:36  (MSK)
>>>---
>>
>>Да, но всё же SIGKILL и SIGSTOP перехватить вам не удастся...
>
>а эти сигналы разве можно с клавиатуры вызвать?

По большому счету достаточно
trap 'echo "Угу, щазз!"' 2 3 20
read -s -n 1

Т.е.
2: Ctrl+C и Ctrl+Break
3: Ctrl+\
20: Ctrl+Z

Но в боевом скрипте я на всякий случай влепил все 32 :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Запрет прерывания работы скрипта" 
Сообщение от allez Искать по авторуВ закладки(ok) on 09-Дек-05, 07:52  (MSK)
>>>---
>>
>>Да, но всё же SIGKILL и SIGSTOP перехватить вам не удастся...
>
>а эти сигналы разве можно с клавиатуры вызвать?


Можно. Даете команду "kill -SIGKILL <PID>" или "kill -9 <PID>" и
сигнал 9 (он же SIGKILL) посылается процессу. SIGSTOP посылается
аналогично.

А если вы имеете в виду сочетания клавиш типа Ctrl-C, то,
насколько мне известно, эти сигналы (да и большинство других) не
привязываются ни к каким клавиатурным сочетаниям. Во избежание...
Но ничто не мешает это (я имею в виду привязку) сделать. Команды "bind" и
файлы inputrc в bash и соответствующие команды и файлы в других оболочках
никто не отменял. Только кому и зачем это может понадобиться?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Запрет прерывания работы скрипта" 
Сообщение от San emailИскать по авторуВ закладки(??) on 09-Дек-05, 09:19  (MSK)
>А если вы имеете в виду сочетания клавиш типа Ctrl-C, то,
>насколько мне известно, эти сигналы (да и большинство других) не
>привязываются ни к каким клавиатурным сочетаниям. Во избежание...

Сигналы 2, 3 и 20 уже привязаны к клавиатуре.
(см.выше)

>Но ничто не мешает это (я имею в виду привязку) сделать. Команды
>"bind" и файлы inputrc в bash и соответствующие команды и файлы в других
>оболочках никто не отменял. Только кому и зачем это может понадобиться?

Например для прерывания работы профайла при входе юзера в систему.
В профайле проверяется некое условие(или несколько условий) и в случае неуспешной проверки надо не просто сделать exit, а написать пользователю почему его обломали и предложить "press any key to EXIT". Он сможет читать облом-объяснение сколь угодно долго, но если ему вдруг вздумается нажать не эникей, а Ctrl+C (или любой другой прерывающий сигнал), то его мечта прервать работу профайла и попасть в шелл не сбудется.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Запрет прерывания работы скрипта" 
Сообщение от allez Искать по авторуВ закладки(ok) on 09-Дек-05, 09:48  (MSK)
>Сигналы 2, 3 и 20 уже привязаны к клавиатуре.
>(см.выше)

В курсе, бабушка писала. Я же говорил не про _все_ сигналы, а про
_большинство_. Ведь и в самом деле _большинство_ сигналов не имеет
привязки к сочетаниям клавиш (примерно 35 против 3, или, если строго
следовать стандартам POSIX, то 16 против 3).

>>Но ничто не мешает это (я имею в виду привязку) сделать. Команды
>>"bind" и файлы inputrc в bash и соответствующие команды и файлы в других
>>оболочках никто не отменял. Только кому и зачем это может понадобиться?
>
>Например для прерывания работы профайла при входе юзера в систему.
>В профайле проверяется некое условие(или несколько условий) и в случае неуспешной проверки
>надо не просто сделать exit, а написать пользователю почему его обломали
>и предложить "press any key to EXIT". Он сможет читать облом-объяснение
>сколь угодно долго, но если ему вдруг вздумается нажать не эникей,
>а Ctrl+C (или любой другой прерывающий сигнал), то его мечта прервать
>работу профайла и попасть в шелл не сбудется.

Вы, похоже, не совсем меня поняли или я недостаточно ясно выразил свою
мысль. Я имел в виду следующее: "кому и зачем надо привязывать к
клавиатуре сигналы SIGKILL и SIGSTOP?", а не "кому и зачем надо ловить и
обрабатывать сигналы?"

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Запрет прерывания работы скрипта" 
Сообщение от Dimm Искать по авторуВ закладки(??) on 09-Дек-05, 12:17  (MSK)
>>>Да, но всё же SIGKILL и SIGSTOP перехватить вам не удастся...
>>
>>а эти сигналы разве можно с клавиатуры вызвать?
>
>Можно. Даете команду "kill -SIGKILL <PID>" или "kill -9 <PID>" и
>сигнал 9 (он же SIGKILL) посылается процессу. SIGSTOP посылается
>аналогично.
Для root-a вообще нет ничего невозможного. :)

>А если вы имеете в виду сочетания клавиш типа Ctrl-C, то,
>насколько мне известно, эти сигналы (да и большинство других) не
>привязываются ни к каким клавиатурным сочетаниям. Во избежание...
>Но ничто не мешает это (я имею в виду привязку) сделать. Команды
>"bind" и файлы inputrc в bash и соответствующие команды и файлы в других оболочках никто не отменял. Только кому и зачем это может понадобиться?
В том то и дело.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру