#elixir #elixir-iex
#elixir #elixir-iex
Вопрос:
Я хочу настроить некоторый код очистки для запуска до того, как пользователь завершит сеанс REPL, с которого начался iex -S mix
.
Я ожидал, что запуск:
System.at_exit fn (_) -> File.write! "afile", "it works" end
внутри сеанса iex для создания файла с именем afile
, но, похоже, этого не происходит.
Чтобы быть немного более конкретным в отношении того, чего я пытаюсь достичь, я запускаю системный процесс внутри REPL (используя System.cmd/2
), и я хочу iex
, чтобы этот процесс был завершен при завершении процесса.
Комментарии:
1. Взлом поведения консоли erlang (а Elixir просто выводит консоль erlang для
IEx
) слишком громоздок и даже часто невозможен. Если единственное, что вам нужно, это отсоединить процесс, то отсоединить процесс будет намного проще. Можно запустить процесс с завершающим амперсандомls amp;
или даже использоватьnohup
.2. @mudasobwa но я не хочу отсоединять процесс, я хочу иметь возможность завершить его непосредственно перед завершением моего процесса erlang.
3. @mudasobwa Я все еще вижу, что процесс
yes
запущен после выходаiex
из usingCtrl-C Ctrl-C
.4. @Dogbert
iex(1)> System.cmd "yes", [] BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution ^C/usr/bin/yes: % standard output: Broken pipe
. Я что-то упускаю?5. @mudasobwa Похоже, что-то отличается в Linux и OSX
yes
(я вижу то же поведение, что и у вас в Linux). В любом случае, попробуйтеSystem.cmd "sleep", ["120"]
— я вижу одинаковое поведение для этого как в Linux, так и в OSX —sleep
продолжает работать даже после выходаiex
.