r - 来自 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 进程存在。
解决方案
有这样的 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)\" &")
推荐阅读
- if-statement - 无法关闭 div
- reactjs - 从firebase异步获取数据并在到达数据后设置状态
- r - 有限数量的 NA 的插值
- ios - iOS objective-c 对象:何时使用 release 何时不使用
- r - R中的乘法
- vb.net - 如何在表单之间共享事件
- ios - viewServiceDidTerminateWithError:: 错误域=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=服务连接中断
- jenkins - 仅当之前的工作在管道中失败时如何构建工作?
- angular - 如何使用 ng bootstrap & angular 6 以编程方式设置自定义日期?
- angular - 防止访问本身托管在blob上的Angular 6应用程序中的blob上提供的静态文件?