首页 > 解决方案 > 来自 R Shiny 应用程序的子背景 Julia 进程在应用程序关闭后不会保持活动状态

问题描述

我需要从一个闪亮的应用程序中生成一个独立的后台 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

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

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

标签: rshinyprocessjuliaparent-child

解决方案


有这样的 Unix 工具nohup&可以分离分叉和进程,并在没有父进程的情况下使其存活。

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

system("bash -c \"nohup julia -e \\\"println(1);sleep(1000);println(2)\\\" &\"")

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

system("nohup julia -e \"println(1);sleep(1000);println(2)\" &")

推荐阅读