System.exit(0)

18 respostas
velo

Pessoas,

Como eu faço para sobreviver a um system.exit(0)?

Estou utilizando uma biblioteca (fechada) numa aplicação, e o animal que fez essa lib me botou um system.exit(0) num determinado local quando ocorre um erro…

Tem como dar um try{}catch{} ou algo assim nesse troço???

VELO

18 Respostas

thiago.correa

Segundo o javadoc não tem como não!

nbluis

Cara containers que dependem da VM como TOMCAT e JBOSS bloqueiam isso …

agora como eu não sei …

Imagina um jaguru lá dá um Sistem.exit(0) em uma aplicação teste e tira todo o resto do ar …

hehe…

Pedrosa

Cara não existe a possibilidade de você descompilar essa lib e fazer o tratamento ?, se o código não estiver ofuscado pode ser uma saída.

KWill

Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.

Não estou muito certo quanto a isso, mas se for isso mesmo, você pode extender a classe SecurityManager e bloquear System.exit(int status) com a sua implementação de checkExit(int status).

Também será necessário usar System.setSecurityManager(SecurityManager s) para fazer com que a jvm use o seu SecurityManager.

Inté.

LPJava

segundo os conceitos basico que tenho com java… a kathy disse que a jvm eh encerrada qdo encontra uma desse tipo :smiley:

nbluis

Cara, se isso fosse verdade, imagina a falta de segurança ao utilizarmos um servidor de aplicação rodando encima da mesma instancia de VM de sua aplicação.

Qualquer System.exit(0), faria com que o servidor inteiro fosse pro espaço.

O Google é pai de todos:
http://www.science.uva.nl/ict/ossdocs/java/tutorial/networking/security/intro.html

LPJava

nbluis:
Cara, se isso fosse verdade, imagina a falta de segurança ao utilizarmos um servidor de aplicação rodando encima da mesma instancia de VM de sua aplicação.

Qualquer System.exit(0), faria com que o servidor inteiro fosse pro espaço.

O Google é pai de todos:
http://www.science.uva.nl/ict/ossdocs/java/tutorial/networking/security/intro.html

entao ta errado o que a kathy falou?

nbluis

Não, errado não tá …

dê uma olhada no link.

plentz

Basicamente, abra o .class, dê uma lida ache a linha que faz o system.exit() e seja feliz. Btw, que diacho de lib é essa que chama System.exit()? Não tem alguma versão que alguém sem problemas mentais já tenha metido a mão e tiro fora essa bizarrice?

Sami_Koivu

Bom, o lance de SecurityManager é legal. Deve ser a opção menos intrusiva.

Quanto aos meios mais intrusivos (que possivelmente violam a licença da tal biblioteca fechada), mesmo se for ofuscado, dá para remover uma chamada pro System.exit() facilmente com reJ. Se não conseguir, eu mesmo posso fazer isso pra você.

bcartaxo

Se não me engano o System.exit() mata só o processo, não a JVM.

nbluis

Mata a instância da VM.

Juntamente com tudo que está carregado nela.

velo

KWill:
Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.

Rodei essa maldita lib dentro do tomcat…

Morre tudo!!!

O q eu estou fazendo é chamar um processo Runtime.getRuntime() e executando fora.

Não é bonito, não é legal, mas pelo menos funca.

VELO

A

Por que que eu iria querer rodar um System.exit(0)?

abraço,
André AS

gomesrod

KWill:
Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.

Não estou muito certo quanto a isso, mas se for isso mesmo, você pode extender a classe SecurityManager (…)


O caminho é esse, mas não é necessário criar um Security Manager, basta modificar as políticas de segurança da sua JVM para que a operação não seja permitida. O Security Manager normal passará a lançar exceção no checkExit().

Velo,
Vou ver se acho algum material sobre como fazer, não tenho de cabeça pois não é todo dia que se mexe com esse tipo de coisa… mas se quiser adiantar o serviço pesquise sobre JAAS.

maior_abandonado

gomesrod:
KWill:
Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.

Não estou muito certo quanto a isso, mas se for isso mesmo, você pode extender a classe SecurityManager (…)


O caminho é esse, mas não é necessário criar um Security Manager, basta modificar as políticas de segurança da sua JVM para que a operação não seja permitida. O Security Manager normal passará a lançar exceção no checkExit().

Velo,
Vou ver se acho algum material sobre como fazer, não tenho de cabeça pois não é todo dia que se mexe com esse tipo de coisa… mas se quiser adiantar o serviço pesquise sobre JAAS.

cara o tópico é de 3 anos e meio atras… provavelmente ele não está mais resolvendo esse problema…

quanto a pergunta do andredecotia, isso serve para finalizar o programa, se você quer finalizar usa isso… claro que usar isso em uma biblioteca é um tanto ridiculo ou absurdo ao menos na minha opinião…

gomesrod

Droga, eu não tinha visto a data hehe
Mais uma pessoa enganada pela ressuscitação de tópicos.

(Pior que eu estava até dando umas testadas nisso pra tentar ajudar o cara…)

matheuslmota

Ei gomesrod, mas se conseguir alguma solução posta aí cara
Mesmo que o tópico seja antigo, eu acho que se alguem sabe a resposta é bom postar, pra quando alguem for procurar já ter a solução.

Criado 7 de maio de 2007
Ultima resposta 10 de set. de 2010
Respostas 18
Participantes 13