그냥 쉽게,하지만 매우 비효율적 인 실행되지 않습니다되어 주로하기 때문에 (비록 ... 어쩌면 당신은 이미 하나?은 javap 이 결국 여러 클래스 파일을 ... 소요됩니다 사용할 수있는) 어떤 프로그램 당신이 지정합니다. 오히려 하나의 프로세스 (셸)를 시작하고 해당 셸은 매개 변수를 검사하고 두 번째 프로세스를 시작합니다.
fork()
및 을 지원하는 시스템을 사용중인 경우 성능을 향상시켜야합니다. 의사 코드 예제로 다음을 고려하십시오.
void replace_system(const char *command)
{
pid_t child = fork();
if (child < 0) {
perror("fork:");
return;
}
if (child) {
/* this is the parent, wait for the child to finish */
while (waitpid(child, &status, options) <= 0);
return;
}
/* this is the new process */
exec*(...);
perror("failed to start the child");
exit(-1);
}
매개 변수를 정렬하려는 방법에 따라 exec * 기능 중 하나를 선택하십시오. 인수 문자열을 구성 요소로 분해하고 원하는 환경을 제공해야합니다. exec * 함수를 호출하면 정의 된 명령을 시작하는 데 오류가없는 한 해당 함수는 결코 반환되지 않습니다.
성능상의 고려 사항 외에 다른 이유로는 자녀의 표준 경로를 수정할 수 있습니다. 예를 들어, 자녀의 출력에 관심이있을 수 있습니다. stdout을 사용 가능한 파이프로 수정하면 단순히 인쇄 된 내용을 읽을 수 있습니다. 이 예제를 찾으려면 표준 popen()
호출에 대한 소스 코드를 연구하십시오.
출처
2014-02-20 12:01:40
mah
* persistent * Java 인스턴스가 있고 JNI 호출/콜백을 통해 통신하는 옵션이 있습니까? (확실히 이런 식으로 할 수 있습니다. 문제는 매번 다른 자바 인스턴스가 필요할 때나 받아 들여질 수 있는지의 여부입니다.) – DevSolar
고맙습니다. 시도해 보겠습니다. 나는 많은 자바 경험이 없다. – Dmitry