Buscar
Social
Ofertas laborales ES
« Retos Fi-ware y Campus Party: gana hasta 75,000 euros con tu idea | Main | ZK 7 Publicado »
miércoles
nov272013

Una línea de código Java capaz de hacer colgar el sistema operativo

Me he encontrado este curioso post esta mañana. Y he podido comprobar que funciona. El siguiente sencillo programa:

public class Crash {
  public static void main(String... args) throws Exception {
    com.sun.tools.attach.VirtualMachine.attach("-1");
  }
}

En Linux y Mac no sólo colgará tu máquina virtual Java, sino que colgará el sistema operativo (ojo, atenerse a las consecuencias si lo probáis…). En Windows, el sistema operativo es capaz de sobrevivir. Para ejecutar este código, es necesario tener el  tools.jar en el classpath. Lo que hace el código es intentar hacer un "attach" a un proceso que obviamente no existe porque tiene un número negativo.

Curioso comportamiento.

PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments (10)

Curioso, mortífero y útil para autores de software malicioso o planeadores de futuras venganzas. Habrá que probarlo en una máquina virtual a ver que pasa.

noviembre 27, 2013 | Registered Commenterantuansoft

Pues a mi simplemente me ha hechado de mi sesión de gnome...

noviembre 27, 2013 | Unregistered Commenterchochis

mmmm supongo que lo que pasa dependerá de la distribución de Linux, o a lo mejor de la versión del kernel.

noviembre 27, 2013 | Registered CommenterAbraham

Solo con Java HotSpot Virtual Machine

noviembre 27, 2013 | Unregistered Commenterjoe

Ahí, ahí, usando la conocida técnica periodística que afirma que nunca dejes que la verdad te estropee una buena noticia.

Primero, cuando intentas compilar o ejecutar sin más el programa usando el JDK 7 Update 45, el resultado es que la clase com.sun.tools.attach.VirtualMachine no existe. Es decir, hay que añadir al classpath la librería tools.jar.

Y en segundo lugar, como más o menos está explicado en uno de los comentarios de la página original, se envía un SIGSTOP a todos los procesos (cuando el depurador se asocia a un proceso para depurarlo suele enviarle esa señal, así que deduzco que lo lógico es que sea esa la que se envíe), lo que provoca la parada de todos los procesos que está ejecutando el usuario (siempre que el proceso no haya interceptado esa señal y la maneje por su cuenta). Eso no afecta para nada a los procesos de otros usuarios, obviamente.

Cuando todos los procesos conectados al server-X11 cierran sus conexiones, el server se reinicia para mostrar la pantalla de login. Nada más se encuentra afectado ni, como sugiere la noticia, se cuelga el Linux (y aunque no tengo MacOS-X, creo que le pasa exactamente lo mismo). Es decir, que al resto del sistema se la trae al pairo los jueguecitos con la JVM.

¿Es un fallo?. Probablemente habría que comprobar que el PID enviado no es menor que cero. ¿Es tremebundo?. Bueno, sin dejar de ser "molesto", no causa problemas catastróficos. ¿Es posible reparar el fallo?. Creo que es discutible, porque siempre es posible iterar sobre todos los PID del sistema enviándole la señal uno por uno e ir terminándolos uno tras otro siempre que sean del usuario que está ejecutando la JVM, cosa posible incluso con un miserable script de shell. Pero el titular de la noticia es, como mínimo, tendencioso y manifiestamente falso. ¿Acaso pretendía decir que el sistema más robusto es Güindous?. :O

Por cierto, parece que la tools.jar solo va con el JDK, no con el JRE....

noviembre 27, 2013 | Registered Commenterzx81

@zx81 ¿has leído la noticia de verdad? porque en base tus comentarios no lo parece

noviembre 28, 2013 | Registered CommenterAbraham

Buenas,

A mi en Ubuntu 13.10 64bit tambien me saca a la pagina de login (cierra completamente la sesion y programas abiertos).

Que en linux y mac se comporte igual me parece bastante logico teniendo en cuenta que ambos tienen base *nix por lo que la llamada al sistema que hace la libreria nativa supongo que sera la misma o muy similar.
Yo diria que mas que un problema de java/jvm es un bug a nivel de SO, el cual deberia protegerse de forma mas elegante antes estas invocaciones.

Un saludo

noviembre 28, 2013 | Unregistered CommenterUnoPorAhi

No, no logre colgar la maquina.

La siguiente instrucción en un archivo "run.bat", si cuelga un Windows.

"start run.bat"

Un saludo,

noviembre 28, 2013 | Registered Commenterefrigerio

Efrigerio, ¿en Windows 8?

noviembre 29, 2013 | Registered Commenterjomaveger

No,
En Windows 7 de 64 bits.
Lo que hace ese script es abrir ventanas a lo bestia, la maquina primero se pone cada vez mas pesada, hasta que finalmente "blue screen".

De todas formas a lo que apuntaba es que...

Es relativamente fácil colgar una maquina (en especial un Windows).
Lo difícil es hacer que permanezca estable..

;)

noviembre 29, 2013 | Registered Commenterefrigerio

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>