R Shiny 应用程序的子背景 Julia 进程在应用程序关闭后不会保持活动状态

Bak*_*urg 5 r process parent-child julia shiny

我需要从一个闪亮的应用程序生成一个独立的后台 Julia 进程,该进程在应用程序关闭后仍然存在。

如果 Julia 进程被称为内联: sys::exec_background('nohup', c("julia", "-e sleep(3000)", "&") 一旦 Shiny 应用程序关闭,子进程将继续存在。

但是,如果在脚本上调用 Julia 进程,并且sleep(3000)内部有相同的调用: sys::exec_background('nohup', c("julia", "test.jl", "&") 一旦 Shiny 应用程序关闭,Julia 进程也会因错误而被终止:

signal (2): Interrupt: 2
in expression starting at .../test.jl:1

kevent at /usr/lib/system/libsystem_kernel.dylib (unknown line)
unknown function (ip: 0x0)
Allocations: 2650 (Pool: 2641; Big: 9); GC: 0
Run Code Online (Sandbox Code Playgroud)

知道为什么以及如何让 Julia 脚本进程在父应用程序中存活的解决方案吗?

这是重现该行为的代码。https://gist.github.com/bakaburg1/5d1b5135fb3b4db1a3ca2eb7e8639aa5 只需运行 Shiny 应用程序,然后将其关闭。只有内联代码 Julia 进程才能幸存。

Prz*_*fel 5

有 Unix 工具,例如nohup&来分离分叉和进程,并使其在没有父进程的情况下保持活动状态。

这适用于我的机器,也应该适用于你的机器:

system("bash -c \"nohup julia -e \\\"println(1);sleep(1000);println(2)\\\" &\"")
Run Code Online (Sandbox Code Playgroud)

根据平台的不同,您可能可以跳过bash -c并只拥有:

system("nohup julia -e \"println(1);sleep(1000);println(2)\" &")
Run Code Online (Sandbox Code Playgroud)