OCTDN 2022-12-23 16:59 采纳率: 36.4%
浏览 47
已结题

process.waitFor()卡死和process.exitValue()进程未退出

用Process process = Runtime.getRuntime().exec(cmd);执行mysqldump的还原命令,程序没报错也没抛异常,但还原不生效,将命令粘贴出来到控制台单独执行就能够生效,process.waitFor()会卡死,process.exitValue()报:process has not exited。
不明白为什么业务层执行命令就不生效。
源码:


```java
//Runtime runtime = Runtime.getRuntime();
            // 第一步,获取登录命令语句,指向mysql安装目录 
            String loginCommand = new StringBuffer().append("mysql -u").append(user).append(" -p").append(password).append(" -h").append(ip)
                    .append(" -P").append(port).toString();
            // 第二步,获取切换数据库到目标数据库的命令语句
            String switchCommand = new StringBuffer("use ").append(databaseName).toString();
            // 第三步,获取导入的命令语句
            String importCommand = new StringBuffer("source ").append(savePath + fileName).toString();
            // 需要返回的命令语句数组
            String[] commands = new String[] {loginCommand, switchCommand, importCommand};

            Process process = Runtime.getRuntime().exec(commands[0]);
            //执行了第一条命令以后已经登录到mysql了,所以之后就是利用mysql的命令窗口  
            //进程执行后面的代码  
            OutputStream os = process.getOutputStream();  
            OutputStreamWriter writer = new OutputStreamWriter(os);  
            //命令1和命令2要放在一起执行
            writer.write(commands[1] + "\r\n" + commands[2]);
            writer.flush();
            writer.close();
            os.close();
            System.out.println(process.exitValue());
            process.destroy();

```

  • 写回答

5条回答 默认 最新

  • 於黾 2022-12-23 17:09
    关注
    获得6.60元问题酬金

    你现在应该是执行的异步进程,exitValue报没结束很正常啊,你代码执行那么快,外部进程还没彻底起来你主进程都结束了,主进程结束了被它启动的子进程也跟着结束了,dump就中断了呀
    你执行waitFor卡死就对了,还原不要时间吗,只要不是一直卡死就是正常现象
    如果你不想程序假死,那应该写个循环,输出进程打印的结果,判断进程结束了再执行destroy(),否则进程被你杀死了肯定不干活了呀

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 创建了问题 12月23日

悬赏问题

  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大