鍍金池/ 問(wèn)答/Java/ 讀取錯(cuò)誤輸出流報(bào)Bad file descriptor

讀取錯(cuò)誤輸出流報(bào)Bad file descriptor

后臺(tái)一直報(bào)這個(gè)錯(cuò):
22:23:01,264 ERROR [STDERR] java.io.IOException: Bad file descriptor
22:23:01,264 ERROR [STDERR] at java.io.FileInputStream.readBytes(Native Method)
22:23:01,265 ERROR [STDERR] at java.io.FileInputStream.read(FileInputStream.java:220)
22:23:01,265 ERROR [STDERR] at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
22:23:01,265 ERROR [STDERR] at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
22:23:01,265 ERROR [STDERR] at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
22:23:01,265 ERROR [STDERR] at java.io.InputStreamReader.read(InputStreamReader.java:167)
22:23:01,265 ERROR [STDERR] at java.io.BufferedReader.fill(BufferedReader.java:136)
22:23:01,265 ERROR [STDERR] at java.io.BufferedReader.readLine(BufferedReader.java:299)
22:23:01,265 ERROR [STDERR] at java.io.BufferedReader.readLine(BufferedReader.java:362)
22:23:01,265 ERROR [STDERR] at com.hisun.cmf.utils.MkmRequestUtil$1.run(MkmRequestUtil.java:45)
源碼是 Process process = Runtime.getRuntime().exec(cmd);

    try {
        final InputStream is_std = process.getInputStream();
        final InputStream is_error = process.getErrorStream();
        new Thread() {
            @Override
            public void run() {
                BufferedReader br2 = new BufferedReader(new InputStreamReader(is_error));
                try {
                    String line2 = null;
                    while ((line2 = br2.readLine()) != null) {
                        if (line2 != null) {
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        is_error.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }![圖片描述][1]
            }
        }.start();
        BufferedReader br1 = new BufferedReader(new InputStreamReader(is_std, "UTF-8"));
        try {
            String line1 = null;
            while ((line1 = br1.readLine()) != null) {
                if (line1 != null) {
                    result = result + line1;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is_std.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        process.waitFor();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        process.getErrorStream().close();
        process.getInputStream().close();
        process.getOutputStream().close();
        process.destroy();
    }

調(diào)用linux指令 然后啟動(dòng)一個(gè)線程讀取錯(cuò)誤流的時(shí)候報(bào)錯(cuò) 請(qǐng)各位大佬幫忙看下,這是什么原因。

圖片描述

上面是報(bào)錯(cuò)的代碼行

回答
編輯回答
咕嚕嚕

Bad file descriptor 是權(quán)限問(wèn)題,你錯(cuò)誤棧里提示的是 MkmRequestUtil.java:45

但是看不出你貼的代碼究竟錯(cuò)誤是在 is_std 還是 is_error,不過(guò)應(yīng)該都是權(quán)限問(wèn)題。

2018年6月6日 20:10