2011-03-01 2 views
2

java 내부에서 외부 프로그램을 시작하고 중지 할 수 있어야합니다. 나는 잘 작동 시작하지만 그것을 중지하면, 그것은 부모를 죽여. 내가 시작하는 프로세스가 kill 0으로 전체 프로세스 그룹을 죽이는 것으로 밝혀졌습니다. 누군가 내 Java 프로세스가 하위 프로그램의 프로세스 그룹에 있지 않도록 만드는 방법을 알고 있습니까?Runtime.getRuntime(). exec 프로세스에서 프로세스 그룹 변경

1) 새로운 프로세스 그룹의 그룹 리더로 자식 프로세스를 만듭니다

+0

데몬으로 만드십시오. –

+0

@Murali 부사장 : 그 대답은 답변으로 게시 할 경우. – EJP

답변

2

그래서 나는이 답변이있는 것 같아요.

ps -efj 
: 리눅스에서 나는 그런 다음 새로운 프로세스의 프로세스 그룹은 명령과 함께 명령의 실행 한 터미널에서 다른 것을 확인할 수 있습니다

bash -c "command <args>" 

를 사용하여 명령 줄에서이 작업을 수행 할 수 있습니다

'j'옵션은 프로세스 그룹 ID (PGID)를 표시합니다.

'bash'명령에 '-c'옵션과 함께 전달되는 인수가있는 명령에 따옴표가 필요하기 때문에 이상하게도 Java에서 올바르게 실행되도록하려면 이상하게 이스케이프 처리해야 할 수도 있습니다. 내가 추측하는 것 자바 그래서 그것은 다음과 같이 보일 것이다 : 그것의 프로세스 그룹의 모든 죽이지 않도록

Process processWithNewProcessGroup = Runtime.getRuntime(). 
              exec("bash -c \"sleep 60\""); 

2) 당신의 자식 프로세스를 변경합니다.

관련 문제