加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用java runtime exec运行连续的Commands Linux

发布时间:2020-12-15 04:12:14 所属栏目:Java 来源:网络整理
导读:我需要使用 java代码运行两个命令linux,如下所示: Runtime rt = Runtime.getRuntime(); Process pr=rt.exec("su - test"); String line=null; BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); while((line=input.
我需要使用 java代码运行两个命令linux,如下所示:

Runtime rt = Runtime.getRuntime();


            Process  pr=rt.exec("su - test");
            String line=null;
            BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

            while((line=input.readLine()) != null) {

                System.out.println(line);
            }
           pr = rt.exec("whoami");
             input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

             line=null;

            while((line=input.readLine()) != null) {
                 System.out.println(line);
            }               
            int exitVal = pr.waitFor();
            System.out.println("Exited with error code "+exitVal);              
        } catch(Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
        }

问题是第二个命令(“whoami”)的输出不显示第一个命令(“su – test”)上使用的当前用户!!
请问这个代码有什么问题吗?

解决方法

如 Javadoc for Runtime.exec()所述:

Executes the specified string command in a separate process.

每次通过exec()执行命令时,它都将在一个单独的子进程中执行.这也意味着在返回时su立即停止存在效果,这就是为什么whoami命令将在另一个子进程中执行,再次使用最初启动该程序的用户.

su test -c whoami

会给你想要的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读