虚拟文件系统环境,用于通过Java进程执行的软件

时间:2019-06-23 18:03:14

标签: java filesystems fuse

我正在研究一个用于在远程系统上执行程序的项目。该项目是用Java在服务器和客户端上编写的。

在服务器上执行的代码通过java.lang.Process运行,并且可以是运行任何一种语言(例如python)的命令。

我想做的是通过该进程拦截所有文件系统调用(以类似于FUSE的方式,但不是在该进程的所有调用上直接在单个装入的FUSE上),并从Java服务器内部处理它们。

我的用例是否有已知方法?

如果没有,那么如果您有关于从何处着手进行此操作的任何指点,那就太好了。

该服务器可能基于Ubuntu,但如果它有助于项目,则切换Linux发行版就没有问题

感谢您的帮助:)

我已经对FUSE进行过讨论,但是据我所知我无法将整个过程锁定在某种FUSE系统中,而是安装在特定位置?

如果您想对当前产生的流程有更多了解,这是执行此操作的代码

ProcessBuilder processBuilder = new ProcessBuilder();
if (SystemUtils.IS_OS_WINDOWS){
    processBuilder.command(System.getenv("SystemRoot") + "\\System32\\cmd.exe", " /c ", command);
}
else{
    processBuilder.command("/bin/bash ", command);
}
try{
    Process process = processBuilder.start();
    ProcessStreamer processStreamer = new ProcessStreamer(process);
    processStreamer.streamTo(context);
    context.attribute("process", process);
    Session.forContext(context).setCurrentRoute("executorinput", context);
}
catch(IOException e){
    context.send("error " + e.getMessage());
}

1 个答案:

答案 0 :(得分:0)

如果可能,将Java进程chroot插入保险丝安装点。

您的案例是使用chroot引用您的描述的确切用例:

  

我想做的是拦截所有文件系统调用   处理(与FUSE相似,但不是在单个安装   直接在该过程的所有调用上融合)

修改

我现在看到,由于Java程序正在文件系统中寻找共享对象,因此您可能会遇到一些小故障。您将需要进行一些复制到“ jail”文件夹中。看到这里-https://askubuntu.com/questions/236778/using-chroot-with-a-java-application