我在Mac和Ubuntu中尝试了很多选项。 我阅读了Rserve文档
http://rforge.net/Rserve/doc.html
以及Rserve和RSclient软件包:
http://cran.r-project.org/web/packages/RSclient/RSclient.pdf
http://cran.r-project.org/web/packages/Rserve/Rserve.pdf
我无法弄清楚在Rserve中打开/关闭连接以及正常关闭Rserve的正确工作流程是什么。
例如,在Ubuntu中,我使用./config --enable-R-shlib(遵循Rserve文档)从源代码安装了R,并在/etc/Rserve.conf中添加了“control enable”行。 / p>
在Ubuntu终端中:
library(Rserve)
library(RSclient)
Rserve()
c<-RS.connect()
c ## this is an Rserve QAP1 connection
## Trying to shutdown the server
RSshutdown(c)
Error in writeBin(as.integer....): invalid connection
RS.server.shutdown(c)
Error in RS.server.shutdown(c): command failed with satus code 0x4e: no control line present (control commands disabled or server shutdown)
然而,我可以关闭连接:
RS.close(c)
>NULL
c ## Closed Rserve connection
关闭连接后,我也尝试了选项(即使连接已关闭,也尝试使用参数'c'):
RS.server.shutdown()
RSshutdown()
所以,我的问题是:
1-如何优雅地关闭Rserve?
2-可以在没有RSclient的情况下使用Rserve吗?
我也看了
How to Shutdown Rserve(), running in DEBUG
但问题涉及调试模式,也未解决。 (我没有足够的声誉来评论/询问关闭是否在非调试模式下工作。)
另见:
how to connect to Rserve with an R client
非常感谢!
答案 0 :(得分:17)
加载Rserve和RSclient软件包,然后连接到实例。
> library(Rserve)
> library(RSclient)
> Rserve(port = 6311, debug = FALSE)
> Rserve(port = 6312, debug = TRUE)
Starting Rserve...
"C:\..\Rserve.exe" --RS-port 6311
Starting Rserve...
"C:\..\Rserve_d.exe" --RS-port 6312
> rsc <- RSconnect(port = 6311)
> rscd <- RSconnect(port = 6312)
看起来他们正在运行......
> system('tasklist /FI "IMAGENAME eq Rserve.exe"')
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"')
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
Rserve.exe 8600 Console 1 39,312 K
Rserve_d.exe 12652 Console 1 39,324 K
让我们关闭。
> RSshutdown(rsc)
> RSshutdown(rscd)
他们已经走了......
> system('tasklist /FI "IMAGENAME eq Rserve.exe"')
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"')
INFO: No tasks are running which match the specified criteria.
通过使用args和/或配置脚本启动Rserve,可以使用无RSclient。然后,您可以从其他程序(如Tableau)或您自己的代码连接到它。 RSclient提供了一种将命令/数据从R实例传递给Rserve的方法。
希望这会有所帮助:)
答案 1 :(得分:4)
在Windows系统上,如果要关闭RServe
实例,可以使用system
中的R
功能将其关闭。
例如,在R
:
library(Rserve)
Rserve() # run without any arguments or ports specified
system('tasklist /FI "IMAGENAME eq Rserve.exe"') # run this to see RServe instances and their PIDs
system('TASKKILL /PID {yourPID} /F') # run this to kill off the RServe instance with your selected PID
如果您正确关闭了具有该PID的RServe实例,将显示以下消息:
成功:PID xxxx的过程已经终止。
您可以通过输入
来检查RServe实例是否已关闭 system('tasklist /FI "IMAGENAME eq Rserve.exe"')
一次。如果没有RServe实例再次运行,您将收到消息
信息:没有正在运行的任务符合指定的条件。
有关此主题的更多帮助和信息,请参阅this related question。
请注意,之前回答中提到的“RSClient”方法比这个方法更整洁,更容易,但无论如何我都会向那些在不知道如何阻止它的情况下启动RServe
的人提出。
答案 2 :(得分:1)
如果无法在R中关闭它,请运行以下代码以在终端中将其杀死。这些代码在Mac上有效。
$ ps ax | grep Rserve # get active Rserve sessions
您将看到类似以下的输出。 29155是活动的Rserve会话的作业ID。
29155 /Users/userid/Library/R/3.5/library/Rserve/libs/Rserve
38562 0:00.00 grep Rserve
然后运行
$ kill 29155