Имеем такой незамысловатый код
function gg(name)
while(true) do
coroutine.yield(name)
io.write(name.."\n")
end
end
c1 = coroutine.create(gg)
c2 = coroutine.create(gg)
while true do
coroutine.resume(c1,"alisa")
coroutine.resume(c2,"bob")
end
Суть вот в чём.
Если запустить lua5.x test.lua
(x=1,2,3,4) и послать сигнал kill -s SIGINT $(pidof lua)
То ожидаемо вижу
...
alisa
bob
alisa
bob
lua: test.lua:24: interrupted!
stack traceback:
[C]: in function 'resume'
test.lua:24: in main chunk
[C]: in ?
dron@gnu:~/Рабочий-стол$
А если запустить luajit test.lua
и послать сигнал kill -s SIGINT $(pidof luajit)
То завершается лишь одна сопрограмма, а вторая продолжает работать, а какая из них уже зависит от того какая была активна в момент принятия программой сигнала.
Я ещё исходники не копал, ну так по диагонали глянул, так и должно быть? Или это «фича» luajit
?
сисьиньфо
dron@gnu:~/Рабочий-стол/nsec.lua$ luajit -v
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2022 Mike Pall. https://luajit.org/
############################################################################
dron@gnu:~/Рабочий-стол/nsec.lua$ lua -v
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.1 -v
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.2 -v
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.3 -v
Lua 5.3.6 Copyright (C) 1994-2020 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.4 -v
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ uname -a
Linux gnu 6.0.0-6-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.0.12-1 (2022-12-09) x86_64 GNU/Linux
dron@gnu:~/Рабочий-стол/nsec.lua$
Я понимаю что luajit
отношения к ванильной луа не имеет и всё такое, мне интересно именно поведение, это норм или нет. А то я тут послал вчера сигнал то и спать лёг, а утром проснулся, а оно всё молотит только молотит половина программы лол, я такой "во дела! Надо на ЛОР срочно написать, вот пишу :D