启动外部程序并检查它是否已崩溃

时间:2017-02-08 10:46:55

标签: r windows multithreading

我遇到以下情况:在我的R脚本中,我使用system2启动第三方程序。该程序被多次调用,不幸的是它不是很稳定并且有时会崩溃。如果发生这种情况,控制权不会返回到R,直到我通过任务管理器手动终止程序。

我想做什么:如果程序在10分钟后没有恢复控制,则自动将其杀死。

我当然可以用C ++,Java或类似程序包装程序,在包装器中实现这个功能,然后从R调用包装器。很可能我也可以使用Rcpp

但是,我想知道是否有办法直接在R中实现这个目标?

顺便说一下:我在Windows 7上。

感谢任何提示!

1 个答案:

答案 0 :(得分:1)

如果您使用的是类似unix的系统,则可以将unix命令timeout添加到系统调用中。例如:

# system command that times out
> exitcode = system('timeout 1 sleep 20')
> exitcode
[1] 124

# system command that does not time out
> exitcode = system('timeout 2 sleep 1')
> exitcode
[1] 0

system返回进程的退出状态,以便您可以检查它是0(OK)还是124(超时)。