Несогласованность Lua pcall при работе с SIGINT в LinuxLinux

Ответить Пред. темаСлед. тема
Anonymous
 Несогласованность Lua pcall при работе с SIGINT в Linux

Сообщение Anonymous »

Я пытаюсь понять детали обработки сигналов в Lua. У меня есть несколько простых однострочников, которые чего-то ждут, и я прерываю их с помощью Ctrl+C. Все они имеют вид print(pcall(....)).
Случай 1:

Код: Выделить всё

▶ lua5.4 -e 'print(pcall(os.execute, "sleep 5"))'
true  nil     signal  2
Первое значение true поступает от pcall и указывает, что вызов os.execute завершился успешно, но остальная часть вывода ( возвращаемые значения из os.execute) говорит, что вызов фактически не удался, поскольку он был прерван сигналом 2 (SIGINT).
Случай 2:

Код: Выделить всё

▶ lua5.4 -e 'print(pcall(io.read))'
false interrupted!
Здесь похоже, что был прерван сам pcall, а не io.read, но, по крайней мере, мы получаем ошибку от pcall.< /p>
Случай 3:

Код: Выделить всё

lua5.4 -e 'print(pcall(function() for _ in io.lines() do end end))'
lua5.4: (command line):1: interrupted!
stack traceback:
[C]: in function 'pcall'
(command line):1: in main chunk
[C]: in ?
Здесь pcall просто игнорируется, и это происходит каждый раз, когда io.lines или file:lines прерываются. Интересно, что если я оберну этот код в другой pcall, то этот внешний pcall будет вести себя так, как ожидалось.
Я в целом понимаю первые два случая, но последний один из них стал для меня некоторой неожиданностью, поэтому мой вопрос: хорошо ли известно описанное выше поведение (и я только что пропустил некоторую документацию)? Кроме того, есть ли что-то еще, на что мне следует обратить внимание при работе с SIGINT?
(Я пробовал версии Lua 5.4 и 5.3, и они обе дают одинаковый результат.)

Подробнее здесь: https://stackoverflow.com/questions/791 ... t-on-linux
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»