我有一个长时间运行的进程(用Java编写),我希望与系统异步运行(...,wait = FALSE)。为了能够确定进程何时结束,我想根据How to determine when a process started with system(..., wait=FALSE) has ended中给出的建议创建文件。问题是似乎wait参数仅适用于多行系统命令中的最后一行,而我似乎无法找到解决方法。
示例:
system('sleep 2') # waits 2 seconds before control is returned to the user
system('sleep 2', wait=FALSE) # control is returned immediately
system('sleep 2; ls', wait=FALSE) # waits 2 seconds before control is returned to the user
我正在使用mac系统运行...
答案 0 :(得分:5)
我觉得很奇怪R的系统只等待第一个命令(它应该调用shell,然后等待两个命令)但是使用&&应该这样做:
system('sleep 2 && ls', wait=FALSE)
如果R正在追加&到命令行,它变为sleep 2; ls &
并且在那里&仅影响第二个参数。
另一个解决方案是在命令周围添加括号,( sleep 2 ; ls ) &
将按顺序执行这两个操作:
system('( sleep 2 ; ls )', wait=FALSE)