Фарфор - функция остановки не убивает процесс - PullRequest
0 голосов
/ 15 декабря 2018

Я использую Porcelain с драйвером goon_linux_amd64 в Debian.Я запускаю длительный процесс ffmpeg с помощью следующей команды:

new_process = Porcelain.spawn("ffmpeg", ["options", "here"])

Затем я убил процесс:

Porcelain.Process.stop(new_process)

и, наконец,

Porcelain.Process.alive?(new_process)
false

Проблема в том, что процесс на самом деле не убит.Я вижу это, когда выполняю команду ps aux.

1 Ответ

0 голосов
/ 15 января 2019

Основная идея модуля Porcelain and Elixir / Erlang Port заключается в обработке внешних процессов с использованием каналов stdin и stdout.А когда вы вызываете stop(pid), вы завершаете внутренний процесс и каналы stdin / stdout (но не процесс внешней ОС).

Проблема в том, что не все программы фактически завершаются в случае закрытия stdin / stdout.Решение в большинстве случаев заключается в том, чтобы обернуть ваш внешний процесс в оболочку: https://hexdocs.pm/elixir/Port.html#module-zombie-os-processes

Та же проблема с фарфором.

...