是否可以在线程可运行声明中将文件写入交互式 shell?
Is it possible to write files to an interactive shell within the declaration of a thread runnable?
我正在尝试启动交互式 shell 然后执行命令
都在一个可运行的线程中。
在可运行声明中,我什至无法创建新文件。
示例 1
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){
}
}
示例 2
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();
}
在示例 1 和示例 2 中我看到可以看到执行了 su 并且交互式 shell 是 运行。
然而,文件是在示例 1 中创建的,但某些文件不是由示例 2 创建的。使用可运行线程声明写入交互式 shell 是否存在一些问题?
这只是一个猜测,但也许您需要明确 writer.flush()
?
此外,您应该始终关闭直播!这将具有自动调用 flush()
.
的奖励效果
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()
}
我正在尝试启动交互式 shell 然后执行命令 都在一个可运行的线程中。 在可运行声明中,我什至无法创建新文件。
示例 1
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){
}
}
示例 2
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();
}
在示例 1 和示例 2 中我看到可以看到执行了 su 并且交互式 shell 是 运行。 然而,文件是在示例 1 中创建的,但某些文件不是由示例 2 创建的。使用可运行线程声明写入交互式 shell 是否存在一些问题?
这只是一个猜测,但也许您需要明确 writer.flush()
?
此外,您应该始终关闭直播!这将具有自动调用 flush()
.
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()
}