Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / закрывать ли потоки? / 5 сообщений из 5, страница 1 из 1
14.05.2014, 16:00
    #38641204
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать ли потоки?
Разбираю чужой код.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   
 public static boolean checkPidExist(Integer pid) throws IOException{
        String sPid = String.valueOf(pid);
        Process proc = Runtime.getRuntime().exec("ps -p " + sPid);
        InputStream ins = proc.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(ins));
        String sTemp;
        while ((sTemp = br.readLine()) != null) {
            if (sTemp.contains(sPid)) {
                return true;
            }
        }
        return false;
    }



Разве не надо дожидаться пока завершится процесс,
и закрывать BufferedReader?

Ну что-то вроде такого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
    private boolean checkPidExist(Integer pid)  throws Exception{
        BufferedReader br = null;
        try {
            boolean result = false;
            String sPid = String.valueOf(pid);
            Process proc = Runtime.getRuntime().exec("ps -p " + sPid);
            InputStream ins = proc.getInputStream();
            br = new BufferedReader(new InputStreamReader(ins));
            String sTemp;
            while ((sTemp = br.readLine()) != null) {
                if (sTemp.contains(sPid)) {
                    result = true;
                }
            }
            proc.waitFor();
            return result;
        } 
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    log.error("can not close stream ", e);
                }
            }

        }

    }



Люблю галеры - работящий коллектив, романтика мужского труда. Стоишь на мостике в пене брызг и эдак поворотясь:
- Голубчик! Утроить количество ударов - Али-паша уходит...
...
Рейтинг: 0 / 0
14.05.2014, 16:09
    #38641214
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать ли потоки?
Лучше закрывать. Народ пишет, что системные хэндлы могут утекать.
...
Рейтинг: 0 / 0
14.05.2014, 16:33
    #38641257
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать ли потоки?
Blazkowicz,

А можно ссылку какую "на почитать" на тему? Просто для себя.
...
Рейтинг: 0 / 0
14.05.2014, 16:39
    #38641274
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать ли потоки?
Вот тут тест опубликован, который демонстрирует утечку
http://www.velocityreviews.com/forums/t561835-do-i-have-to-close-all-streams-from-process-class-after-using-theprocess-object.html
Можно чем-то мониторить системные хэндлы и смотреть текут они или нет.

Вот ещё статьи гуглятся с пол пинка
http://mark.koli.ch/leaky-pipes-remember-to-close-your-streams-when-using-javas-runtimegetruntimeexec
http://steveliles.github.io/invoking_processes_from_java.html
...
Рейтинг: 0 / 0
14.05.2014, 19:15
    #38641463
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
закрывать ли потоки?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / закрывать ли потоки? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]