java process 重启_JAVA Process启动sh 后的问题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
import android.annotation.SuppressLint;
import android.os.*;
import java.io.*;
import java.lang.Process;
public class RootShellTask extends Thread
{
@SuppressLint("HandlerLeak")
Handler h = new Handler(){
@Override
public void handleMessage(Message msg)
{
// TODO: Implement this method
super.handleMessage(msg);
Bundle b = msg.getData();
int flag = b.getInt("flag");
if (flag == FLAG_START)
{
boolean root = b.getBoolean("root");
String command = b.getString("data");
RootShellTask.this.call.onStart(command, root);
}
else if (flag == FLAG_RUN)
{
String output = b.getString("data");
RootShellTask.this.call.onRun(output);
}
else if (flag == FLAG_FINISH)
{
int code = b.getInt("data");
RootShellTask.this.call.onFinish(code);
}
}
};
public void run()
{
Message m;
Bundle b;
try
{
String shell = root ? "su" : "sh";
process = Runtime.getRuntime().exec(shell, envp);
os = new DataOutputStream(process.getOutputStream());
if (call != null)
{
m = new Message();
b = new Bundle();
b.putInt("flag", FLAG_START);
b.putString("data", command);
b.putBoolean("root", root);
m.setData(b);
h.sendMessage(m);
}
os.write((command).getBytes());
os.write(("\n").getBytes());
os.write(("exit $?\n").getBytes());
os.flush();
if (call != null)
{
stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
stderr = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String out = "";
String err = "";
while ((out = stdout.readLine()) != null | (err = stderr.readLine()) != null)
{
StringBuffer s = new StringBuffer();
if (out != null)
{
s.append(out + "\n");
}
if (err != null)
{
s.append(err + "\n");
}
m = new Message();
b = new Bundle();
b.putInt("flag", FLAG_RUN);
b.putString("data", s.toString());
m.setData(b);
h.sendMessage(m);
}
}
int code = process.waitFor();
if (call != null)
{
m = new Message();
b = new Bundle();
b.putInt("flag", FLAG_FINISH);
b.putInt("data", code);
m.setData(b);
h.sendMessage(m);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if (os != null)
{
os.close();
}
if (stderr != null)
{
stderr.close();
}
if (stdout != null)
{
stdout.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
int FLAG_FINISH = 0;
int FLAG_RUN = 1;
int FLAG_START = 2;
private Process process;
private DataOutputStream os;
private BufferedReader stderr;
private BufferedReader stdout;
private RootShellCallback call;
private String command;
private String[] envp;
private boolean root;
public RootShellTask(String command)
{
this(command, true);
}
public RootShellTask(String command, RootShellCallback call)
{
this(command, true, call);
}
public RootShellTask(String command, boolean root)
{
this(command, root, null);
}
public RootShellTask(String command, boolean root, RootShellCallback call)
{
this(command, root, call, null);
}
public RootShellTask(String command, boolean root, RootShellCallback call, String[] envp)
{
this.call = call;
this.envp = envp;
this.command = command;
this.root = root;
}
public void setProcess(Process process)
{
this.process = process;
}
public Process getProcess()
{
return process;
}
}
interface RootShellCallback
{
void onStart(String command, boolean root);
void onRun(String output);
void onFinish(int exitCode);
}
java process 重启_JAVA Process启动sh 后的问题相关推荐
- java catch后面_java 异常被catch后 将会继续执行的操作
我就废话不多说了,大家还是直接看代码吧~ import java.util.UUID; public class Test { public static void main(String[] arg ...
- java闪屏_Java Tomcat 启动闪屏-原因之一---配置问题
如Tomcat启动异常,首先确保Java安装和Tomcat安装版本是否对应,环境变量是否配置正确,如检查通过后,依然启动闪屏.可以依次解决: 1.在Tomcat启动文件Startup.bat之中最后添 ...
- java服务 重启_Java服务重新启动4或5次
我正在运行 Java服务来从数据库中轮询数据. 在我的课上,我有一个线程,每隔5秒在db中查找数据-- 在特定的时间(比如在营业时间之后的下午6点),我让我的线程睡到一些配置的时间延迟. 问题:当我让 ...
- 深入研究java.lang.Runtime类,Process类
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行 ...
- 问题:org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0
在用as开发项目的过程中,我碰到了这个错误,在网上找到了如下的解决方法,做下总结: 被编译的代码或资源有问题( finished with non-zero exit value 1): 出现这种编译 ...
- java linux 服务_java项目部署Linux服务器几种启动方式总结经验
一:两种部署包: 部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是ja ...
- 网页启动JAVA是崩溃_启动画面后本机应用程序崩溃
我是React Native的新手 . 我在Expo XDE中创建了一个新的空白项目,当我试图在我的Android设备上运行它时,每次它在启动画面后崩溃 . 这只是一个简单的空白应用程序 . 没有日志 ...
- java定时器停止_java 定时器中任务的启动、停止、再启动
package com.cvicse.ump.timer.service; import java.util.Date; import java.util.Timer; import com.cvic ...
- phpstudy_pro启动mysql后循环停止又重启
phpstudy_pro启动mysql后循环停止又重启. 最初判断是与之前安装的mysql冲突,于是把mysql卸载后删除所有相关文件和相关系统变量,重启还是没有解决问题.报错2003. 然后卸载ph ...
最新文章
- MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
- 干货 | 拒当调参师工程师:超参数搜索算法一览
- 使用Cloudformation集成Spring Boot和EC2
- windows 批处理
- bezier曲线_套娃成神:贝塞尔曲线
- 中国教育与软件企业的共同误区
- configure报错C compiler cannot create executables
- CAD数据与ArcGIS数据的互转换
- 代码学习-Linux内核网卡收包过程(NAPI)
- 系统学习NLP(十二)--文本表示综述
- 为什要学习烹饪?学习烹饪迫在眉睫
- 一种解决各种 macos unlocker 无法下载 Darwin.iso 的方法
- 树莓派能学linux吗,用树莓派能高效学习Linux和Python吗?
- DirectX 基础总结笔记
- 电偶极子的MATLAB场模拟
- 像追女神一样学好java~
- 双十一来临,仓储物流快递安全保障解决方案
- 左连接,右连接与自然连接语法以及注意点
- linux 安装apache apu,Apache编译安装
- nginx修改文件上传大小配置
热门文章
- java 简易的闹钟设计_JavaFX实现简易时钟效果
- rest framework 节流
- SecureRandom-随机数的生成
- 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...
- 在Js或者cess后加版本号 防止浏览器缓存
- Ubuntu 10.04 分辨率调整
- uva10256 凸包
- [zz]linux修改密码出现Authentication token manipulation error的解决办法
- 警示2018:那些值得在年底彻查和回顾的数据库事件
- 撬动百亿VRAR产业,让VR们“造”起来