Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在线程可运行的声明内将文件写入交互式shell?_Java_Multithreading_Runnable - Fatal编程技术网

Java 是否可以在线程可运行的声明内将文件写入交互式shell?

Java 是否可以在线程可运行的声明内将文件写入交互式shell?,java,multithreading,runnable,Java,Multithreading,Runnable,我正在尝试启动一个交互式shell,然后执行命令 所有这些都在一个可运行的线程中。 在runnable声明中,我甚至无法创建新文件 例1 例2 在示例1和示例2中,我看到已经执行了su,并且一个交互式shell正在运行。 然而,示例1中创建了文件,但示例2没有创建somefile。使用可运行的线程声明从写入交互式shell是否有问题?这只是猜测,但可能需要显式地writer.flush() 此外,您应该始终关闭您的流!这将具有自动调用flush()的额外效果 请注意,许多标签的“追随者”数量很少

我正在尝试启动一个交互式shell,然后执行命令 所有这些都在一个可运行的线程中。 在runnable声明中,我甚至无法创建新文件

例1 例2 在示例1和示例2中,我看到已经执行了su,并且一个交互式shell正在运行。
然而,示例1中创建了文件,但示例2没有创建somefile。使用可运行的线程声明从写入交互式shell是否有问题?

这只是猜测,但可能需要显式地
writer.flush()

此外,您应该始终关闭您的流!这将具有自动调用
flush()
的额外效果


请注意,许多标签的“追随者”数量很少。您没有包括最有用的标记,即
[java]
?只有熟悉您正在使用的语言的程序员才能在这样的问题上提供帮助。还要注意附在[shell]标记上的定义,您所问的问题超出了正常[shell]问题的范围。祝你好运。我不明白为什么你真的需要一根线来完成这一切。如果您的shell是交互式的,您希望某人或某事如何与之交互?我认为有问题。我想从线程内启动进程,以跟踪当前正在运行的线程,从而知道正在运行的进程。我的计划是有几个不同的线程,每个线程都有自己的互斥进程。
if(true){
    Process p = null; 
    try{
        p=Runtime.getRuntime().exec("su");
        BufferredWriter writer = new BufferedWriter(new
        OutputStreamWriter(p.getOutputStream()));
        writer.write("touch /data/local/tmp/file\n");
    }
    catch(Exception e){
    }
}
public void createNewThread(){
    thread = new Thread(new Runnable(){
        @Override
        public void run(){
            Process p = null;
            try{
                p = Runtime.getRuntime().exec("su");
                BufferredWriter writer = new BufferedWriter(new
                OutputStreamWriter(p.getOutputStream()));                                                           
                writer.write("touch /data/local/tmp/somefile\n");
            }
            catch(Exception e){
            }
        }
    });
    thread.start(); 
}
try {
    p=Runtime.getRuntime().exec("su");
    BufferredWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
    writer.write("touch /data/local/tmp/file\n");
} catch(Exception e) {
    // handle exceptions
} finally {
    writer.close(); // this will automatically call writer.flush()
}