Size: a a a

2019 November 29

S

Snusmumriken in pro.lua
Zlokot
да у меня нет функций. просто набор инструкций.
значит я просто в начале делаю проверку на другой PID этого скрипта (!= моему ) или даже просто считаю кол-во скриптов в PS
и если их 2 - то просто return 0 и все - оно ж по идее дальнейшие инструкции не будет выполнять
Дык смотри, тебе ps возвращает список процессов, и, что самое важное — список команд, которыми эти процессы были запущены. Если там скрипт в интерпретаторе — его команда выглядит примерно как
lua /path/to/script.lua
Проверяешь процессы на подобный путь, или на имя скрипта в конце команды его запуска.
источник

Z

Zlokot in pro.lua
>Проверяешь процессы на подобный путь, или на имя скрипта в конце команды его запуска

при запуске моего скрипта с такой вот проверкой внутри - он должен найти как минимум один такой путь в списке процессов - собственный)
источник

S

Snusmumriken in pro.lua
Во, даже под вендой такое есть. Я, правда, написал скрипт-запускатель скриптов (он там окружение разворачивает вокруг запускаемого, xpcall'ит запускаемое и ставит debug.debug, чтобы консоль не закрывалась сразу по исполнению скрипта), поэтому путь чуть длиннее.

Но да, если в списке процессов найдено более одного процесса с именем текущего скрипта в команде запуска — срочно прерываем всё и заканчиваем существовать.
источник

Z

Zlokot in pro.lua
вот. значит я правильно рассуждаю. спасибо)
источник

S

Snusmumriken in pro.lua
Имя/путь текущего скрипта можно получить через arg
источник

S

Snusmumriken in pro.lua
Это стандартная табличка, и там нулевым элементом обычно расположен путь до текущего скрипта. Минус первым — путь до интерпретатора. Некоторые умники в минус второй запихивают всякую дичь, связанную с родительским приложением (которое стартует луа-скрипт), например версию сборки.
Фактически, это argv из сишки.
С первого по последующие — пользовательские аргументы запуска.
источник

S

Snusmumriken in pro.lua
То есть, по грубым прикидкам, самое короткое решение примерно следующее:
function checkInstanceCount()
 -- gsub возвращает кол-во замен
 -- вторым аргументом
 local s, n = os.execute("ps all"):gsub(arg[0], '')
 return n
end

if checkInstanceCount() > 1 then
os.exit()
end
источник

S

Snusmumriken in pro.lua
источник

Z

Zlokot in pro.lua
а зачем local s?
источник

S

Snusmumriken in pro.lua
Потому что тут новая строка, возвращённая gsub'ом, она не нужна, нам нужно только количество замен, то есть сколько инстансов найдено.
источник

S

Snusmumriken in pro.lua
Это не самое оптимальное, но короткое решение.
источник

S

Snusmumriken in pro.lua
local a, b = ("banana"):gsub("a", "n")
print(a) --> bnnnnn
print(b) --> 3
источник

VG

Vladislav Grubov in pro.lua
Snusmumriken
Потому что тут новая строка, возвращённая gsub'ом, она не нужна, нам нужно только количество замен, то есть сколько инстансов найдено.
select(2, ...)
?
источник

S

Snusmumriken in pro.lua
Можно, но лишние сложности с пониманием селекта, Злокоту пока рано.
источник

Z

Zlokot in pro.lua
!/usr/bin/lua

 local s, n = os.execute("ps"):gsub(arg[0], '')

 print(s)

 print(n)



/usr/bin/lua: ./test:3: attempt to index a number value
stack traceback:
       ./test:3: in main chunk
       [C]: ?
источник

D

DaySandBox in pro.lua
Message from McPrince Vn deleted. Reason: new user and @-link to channel (?)
источник

S

Snusmumriken in pro.lua
Zlokot
!/usr/bin/lua

 local s, n = os.execute("ps"):gsub(arg[0], '')

 print(s)

 print(n)



/usr/bin/lua: ./test:3: attempt to index a number value
stack traceback:
       ./test:3: in main chunk
       [C]: ?
Да, подобосрался, сек
источник

Z

Zlokot in pro.lua
выводит полный списко процессов, среди которых есть и мой, текущий:

17465 root      1116 S    {test} /usr/bin/lua ./test

но в итоге, под списком этим пишет ошибку
источник

S

Snusmumriken in pro.lua
Таки нужен io.popen
function checkInstanceCount()
 local s, n = io.popen("ps all")
 s = s:read('*all'), s:close()
 local path = arg[0]:gsub("[-.%%]", "%%%1")
 s, n = s:gsub(path, '')
 return n
end
Ещё влепил экранирование, на случай эксцессов (дефисы и точки в пути — это спецсимволы в регулярках)
источник

Z

Zlokot in pro.lua
root@gate1:~# ./test
table: 0x855c50
1
источник