Algumas vez se perguntaram porque é que umas vezes o Eclipse arranca um único processo chamado “eclipse”, e outras vezes arranca dois processos, um chamado “eclipse” e outro chamado “javaw”? A resposta está aqui.
Resumidamente, quando o pedaço de código do eclipse que é nativo de cada plataforma consegue iniciar uma JVM por JNI, temos um único processo, quando não consegue usa os executáveis do JRE em causa, o que resulta num novo processo. Uma forma de forçar a invocação por JNI e, consequentemente, a existência de um único processo, é especificar a opção “-vm” na linha de comando ou no ficheiro eclipse.ini e apontá-la directamente para o ficheiro jvm.dll (ou libjvm.so) do JRE em causa. Isto pode ser particularmente importante quando se tem que parar programaticamente o eclipse em plataformas que não sabem muito bem gerir a hierarquia entre processos (leia-se: Windows):
The fundamental problem here is that, unlike Unix, Windows does that maintain parent-child relationships between processes. A process can kill its own immediate children, but unless you make other arrangements to obtain the information, can’t kill any ’grand-children’ because it has no way of finding them. Ctrl-C types at a command prompt is just a character that the command processor interprets and not a signal sent from outside. When you ‘destroy’ a child command script, that process does not get the opportunity to terminate any child processes it may know about. Recent versions of WIndows (2000 or later) do provide a “Job” concept which acts as a container for processes. Killing a Job does terminate all processes associated with that job. However Jobs do not contain other jobs, so fully emulating the Unix behaviour is probably impossible. [Sun Bug ID: 4770092]
Publicado por Manuel Padilha