2012-08-27 2 views
0

나는 다음과 같은 명령을 실행하려고했다안드로이드 (자바)에서 grep 명령

Process p = Runtime.getRuntime().exec("/system/bin/lsof|grep mediaserver"); 

를 실행할 수 있지만 오류가 아니에요. 다음 명령을 실행하면

Process p = Runtime.getRuntime().exec("/system/bin/lsof "); 

파일이 성공적으로 저장됩니다. 오류가 무엇인지 알 수 있습니까? 실제로 미디어 서버 서비스가 실행 중인지를 나열하고 확인하고 싶습니다.

+0

글쎄, 당신이 오류를 얻는 사람이기 때문에 오류가 무엇인지 알려줄 수 있습니다. 어쩌면 우리가 너를 도울 수 있겠 니? – verdesmarald

+0

첫 번째 추측? lsof 명령 앞에/system/bin을 넣어야하기 때문에 grep에 경로를 입력 해보십시오. 즉/system/bin/lsof |를 사용하십시오./system/bin/grep mediaserver "또는 grep 경로가 무엇이든간에 – billjamesdev

+0

다음 오류가 발생합니다. System.err (345) : java.io.IOException : exec()를 실행하는 동안 오류가 발생했습니다. bin/lsof | grep, init] 작업 디렉토리 : null 환경 : null – chiv

답변

1

grep 유틸리티가 장치에 설치되어 있지 않을 수 있습니다.

당신은 콘솔에서 다음을 시도하여 확인할 수 있습니다

> adb shell 
$ grep 
grep: not found 

마지막 줄은이 명령을 사용할 수 없음을 나타냅니다.

+0

grep이 없으면 어떻게해야합니까? 쉘 대체가 있습니까? – Elist

+0

다음을 확인하십시오 : https://stackoverflow.com/questions/27615220/grep-command -not-found-in-adb-shell – fiddler

0

문제는 Runtime.getRuntime().exec(...)은 쉘 언어를 처리하는 방법을 모른다는 것입니다. 그래서이 같은 리눅스/유닉스 플랫폼에서 당신은 것입니다 : 그러나

Process p = Runtime.getRuntime().exec(new String[]{ 
    "/bin/sh", "-c", "/system/bin/lsof | grep mediaserver"}); 

, (분명히) 안드로이드는 기본적으로 명령 쉘/명령 프롬프트가 없습니다. 따라서 장치에 적합한 셸을 식별하고 설치하거나 "손으로"파이프 라인을 구성해야합니다. 즉, "파이프"파일 디스크립터를 생성하고, 두 개의 명령을 실행하여 lsof이 파이프에 쓰고 grep이 그것으로부터 읽도록한다.

아마 대답은 ...이처럼 실행하는 것입니다

Process p = Runtime.getRuntime().exec(
     "adb shell /system/bin/lsof | grep mediaserver"); 

(대화 형 자바에서 그 일을하기 전에 ADB에서 "쉘 ...."부분을 실행 해보십시오.)

+0

답장을 보내 주셔서 감사합니다. W/System.err (1370) 오류가 발생했습니다 : java.io.IOException : exec()를 실행하는 중 오류가 발생했습니다 명령 : [/ bin/sh, -c ,/system/bin/lsof | grep init] 작업 디렉토리 : null 환경 : null – chiv

+0

"/ bin/sh"에 대한이 문자열은 무엇입니까? – chiv

관련 문제