Also what you can do is register your process to give it a name:
def func do
Process.register(self(), :hello)
convert_video.(1280)
IO.puts("Conversion done, starting to upload")
end
Then start your app with iex
(like iex -S mix phx.server
if using Phoenix) and run a single long conversion (otherwise process registration will clash), and once you see in the OS that it is finished, you can call this in IEx:
pid = Process.whereis(:hello)
This will return a pid, or nil
. If it returns nil
it means that your function either crashed silently, for some reason, or completed but you could not see the output of IO.puts
for some reason (but it was executed as Robert says).
If you get a pid, then your process is still awaiting something, or looping forever somewhere. You can then call this in IEx shell:
Process.info(pid, :current_stacktrace)
This will show what is that process doing at the moment.
For instance if for some reason the process is still awaiting a return from a system command, you may see this:
iex(7)> pid = spawn(fn -> System.cmd("watch", ["sleep", "1000"]) end)
#PID<0.116.0>
iex(8)> Process.info(pid, :current_stacktrace)
{:current_stacktrace,
[
{System, :do_port_byte, 3, [file: ~c"lib/system.ex", line: 1118]},
{System, :do_cmd, 3, [file: ~c"lib/system.ex", line: 1107]},
{:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 396]}
]}