我有2个线程在并行运行。线程的运行函数如下所示
public void run(){
Runtime rt = Runtime.getRuntime();
Process s;
try {
s = rt.exec("cd /.../somefolder/"+i+"/");
closeStream(s); // this closes process s
s = rt.exec("sh adapMs.sh");
closeStream(s); // this closes process s
} ...
}adapMs.sh创建了一些文件夹、文件..在由行指定的当前目录下
s = rt.exec("cd /.../somefolder/"+i+"/");例如,thread1使用目录1。当thread1使用目录1时,另一个thread2执行该行
s = rt.exec("cd /.../somefolder/"+i+"/");这是目录2。
这会导致thread1在目录2下创建新文件,还是在目录1下创建文件夹?
换句话说,线程2会导致改变线程1的当前目录吗?
发布于 2010-08-22 06:32:39
我不确定您的解决方案是否可行,但这显然是用the intended way解决您在Java语言中的问题:
rt.exec("sh adapMs.sh", null, new File("/.../somefolder/" + i + "/"));edit删除了'cd‘并添加了文件
发布于 2010-08-22 06:24:11
每个exec都在自己的线程和环境中运行。如果线程1在目录1中,它将留在目录1中(并且不受线程2的影响)。
发布于 2010-08-22 10:38:40
换句话说,线程2会导致改变线程1的当前目录吗?
外部进程的执行过程完全由操作系统决定,而不是由Java决定。
如果操作系统对"cd“命令的实现使得一个进程可以更改另一个进程的当前目录,那么这种情况就会发生。如果不是,那么它就不会。
据我所知,没有主流操作系统允许一个进程改变另一个进程的当前目录...所以在实践中,你的问题的答案是“不”。但在技术上最正确的答案应该是“检查您的操作系统/ shell文档”。
https://stackoverflow.com/questions/3539254
复制相似问题