Elixir -- 分离的进程ID (PID)

3

由于某些原因,elixir --detached 的进程ID不等于 $!。

例如:

elixir --detached -S mix run --no-halt & echo $!

并且

ps aux | grep 'mix run'

输出不同的进程ID。

这种情况正常吗?我尝试了nohup,但它有其他问题。


你为什么期望 elixir --blah 的进程 ID 等于 mix blah 的进程 ID? - Aleksei Matiushkin
我的想法是,在这两种情况下都会生成一个 .beam 进程,而 Elixir/Mix 只是一个别名,用于以正确的参数调用 Erlang-VM。 - sunprophit
我猜这里正在发生分叉 - $! 将返回父进程 id,但子进程是实际在后台运行的。问题是 - 你为什么需要 pid? - cdegroot
有些情况下我想要终止它。我知道可以使用grep或者一些监控程序来实现,但是我希望用最简单的方式来完成。 - sunprophit
1个回答

2

我遇到了同样的问题,并在这里找到了解决方案。
在我的情况下,最终我得到了:

$ elixir --detached -e "File.write! 'tmp/pids/bot.pid', :os.getpid" -S mix run --no-halt

$ cat tmp/pids/bot.pid
21352

$ ps aux | grep mix
deployer 21352 50.2  9.1 2234544 45788 ?       Sl   12:21   0:02 /usr/lib/erlang/erts-9.0/b

它可能看起来不太好看,但它确实能够工作 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接