Estoy buscando (¿o sí?) Un fragmento de código que se cierra inmediatamente, de una manera absolutamente poco convencional.
Esto no significa: System.exit((int) 'A');
(Java).
Podría significar:
#!/usr/bin/env python3
# NOTE: This kills ALL RUNNING Python processes. Be careful!
def exit():
import os
os.system("killall python3")
# Windows addon
os.system("taskkill /im python.exe /f")
exit()
¡La respuesta más votada gana! Todos los idiomas, todas las arquitecturas.
Editar: ¡ Renunciar lanzando excepciones ya no será aceptado!
exit()
, pero aún así es una característica implementada ...Respuestas:
bash, 6 caracteres
exec
reemplaza el proceso actual con algo más.[
es el comando más corto que pude encontrar que es inofensivo (es un alias paratest
)fuente
exec
el[
comando :)~ $ echo $PATH/?
->/bin/X /bin/[ /bin/w
. Fish shell me dio otros dos comandos.w
Es interesante en mi opinión.Golpetazo
Termina el programa tan rápido como el usuario puede reaccionar ;-)
fuente
Código Rojo
(Antecedentes: Redcode es el lenguaje de pseudoensamblaje utilizado en el juego de programación Core War introducido por AK Dewdney en 1984. Por lo general, hace un uso intensivo del código de modificación automática . Hace unos años escribí un pequeño tutorial sobre programación de Redcode . )
Este programa de instrucción única no solo se suicida, sino que también borra su propio código de programa de la memoria, sin dejar rastro de sí mismo en la memoria.
Aburrido, dices? Después de todo, el programa anterior habría muerto de todos modos, incluso si no hubiera sobrescrito su código. OK, aquí hay uno que limpia todo el núcleo antes de finalmente limpiarse y morir:
Las dos primeras instrucciones realmente hacen la mayor parte del trabajo: es solo un simple ciclo de copia / salto que copia la celda de instrucciones en blanco (que se inicializa
DAT 0, 0
) después del final del programa en cada celda posterior (usando el modo de direccionamiento indirecto posterior al incremento)>
), hasta que el puntero finalmente se ajusta al comienzo de la memoria y sobrescribeMOV
el bucle en sí. Una vez que eso sucede,JMN
(JuMp si no es cero) lo detecta y falla.El problema es que esto todavía deja a la
JMN
propia parte sin control. Para deshacernos de él, necesitamos otroMOV
para borrar elJMN
... pero eso significa que necesitamos otroMOV
para borrar esoMOV
, y así sucesivamente. Para hacer que todo el programa desaparezca sin dejar rastro, tenemos que organizar de alguna manera una solaMOV
instrucción para borrar tanto a sí mismo como al menos otra instrucción.Ahí es donde
SPL
entra: es uno de los códigos de operación más extraños en Redcode. Básicamente, es una instrucción de "Rama en ambos sentidos". Verá, en lugar de un simple registro de "contador de programa", como lo haría cualquier CPU normal, la Redcode VM tiene una "cola de proceso": una lista cíclica de punteros a las instrucciones que se ejecutarán. Normalmente, en cada ciclo, un puntero de instrucción se desplaza de la cabecera de la cola, la instrucción se ejecuta y la siguiente instrucción (a menos que haya un salto o una instrucción ilegal) se empuja hacia la cola de la cola. PeroSPL
hace que tanto la siguiente instrucción y la instrucción objetivo determinado (que, en el caso deSPL 1
, es también la siguiente instrucción) que se insertan en la cola.El resultado de todo esto es que, después de que se
SPL 1
hayan ejecutado las dos instrucciones, ahora hay cuatro procesos en la cola, todo sobre la ejecución de la últimaMOV
. Esto es suficiente para borrarJMN
tanto elSPL
s como elMOV
propio, y también deja laptr
celda de instrucción comoDAT 0, 0
indistinguible del núcleo vacío que la rodea.(Alternativamente, podríamos haber reemplazado la
ptr
instrucción conMOV 1, 1
, que habría sido convertidaMOV 1, 0
por las instrucciones anteriores, y así se habría borrado, como lo hizo el primer programa anterior).PD. Si desea probar estos programas, descargue un simulador Redcode (también conocido como MARS). Recomiendo CoreWin o los venerables pMARS , aunque también hay otros simuladores buenos.
fuente
MOV source, dest
. Pero como dije, todas las direcciones en Redcode son relativas, por lo que la dirección en0
realidad significa "la dirección de esta instrucción", mientras que la dirección en1
realidad significa "la dirección de esta instrucción + 1". (Y la dirección absoluta 0 no es de ninguna manera especial en Redcode de todos modos; de hecho, una consecuencia interesante del diseño de "direccionamiento relativo" es que es realmente imposible para un programa Redcode encontrar su propia dirección absoluta en el núcleo. )do
Tenga en cuenta que este no es un código portátil. Funciona con ZOG C en el ART DS9000 . Creo que el uso de armamentos no convencionales califica este código para este desafío. Si le preocupa que la demora que toma ese código para entregar su carga útil no califique de inmediato , contáctenos para recibir asesoramiento sobre ataques preventivos.
En mi máquina doméstica, ni siquiera se compila: no tengo los controladores y bibliotecas correctos. He oído que hay implementaciones populares de C donde este programa compila y ejecuta efectos menos espectaculares, pero nunca he tenido el descaro de probar.
fuente
JavaScript
Simplemente navega a un sitio web diferente ( delicioso ). :-)
Golfizado (10 caracteres):
fuente
DO#
Se suicida matando todos los procesos menos a sí mismo.
Para darle un poco de sabor, podríamos invocar en
TerminateProcess
lugar de usarProcess.Kill
fuente
BASH - 12 caracteres
Bifurcación clásica. Bloquea la computadora y obliga al usuario (o administrador) a reiniciarse.
fuente
:()
y:|
Python (en computadoras portátiles viejas)
En computadoras portátiles antiguas con procesadores de un solo núcleo y mal enfriamiento:
Cuando la computadora portátil explota (o simplemente se apaga) después de unas horas, el programa no se ejecutará.
(Para mejores resultados, envuelva la computadora portátil en una manta o algo así)
fuente
Rubí
kill
s el proceso de ejecución de ruby / irb en * nix.fuente
Apple 2 Basic
fuente
POKE
escribe unEND
token sobre elPRINT
token, y luego el segundoPOKE
escribe un terminador de comando sobre el primero"
. CuandoGOTO
se ejecuta, termina ejecutándose enEND
lugar dePRINT
y el programa finaliza.En el ensamblaje, algo como esto probablemente funcionaría:
Recuerdo que compila esto realmente funcionó DOS. En aquel entonces, reiniciaba la computadora.
fuente
PHP
Efectos:
elimina su archivo de script de mierda y luego mata su programa.
Lanza a uno de estos chicos malos a una base de código para confundir a la gente.
fuente
quit
pero la lista de parámetros es un código para ejecutar. Recibo un error de análisis al intentar ejecutarlo.C, 9 caracteres
Compila con
gcc
y otros compiladores a los que no les importan los pequeños detalles comomain
no ser una función.Funciona en
x86
plataformas: el programa se cierra inmediatamente.195 es el código de operación de la
ret
instrucción.fuente
main
se encuentra en.data
porque es un int, no en.text
, y.data
se carga en una página no ejecutable.Siempre quise publicar esto en algún lugar, supongo que encaja aquí a pesar de que ya hay una respuesta aceptada.
Esto funciona en cualquier sistema posterior a 4.3BSD y en otros que se implementen
revoke
de la misma manera. Linux no tiene un prototipo, MacOS lo hizo en el pasado, pero solo devuelve errores en las versiones recientes.revoke
toma una ruta a un archivo y destruye por la fuerza todas las referencias a ese archivo. Esto incluye las asignaciones de memoria de ese archivo, incluso el propio ejecutable. Obviamente, debe iniciar el programa con una ruta hacia él, esto no funcionará si está en RUTA.Una variación de esto que debería funcionar en la mayoría de los sistemas tipo Unix es:
Simplemente anulamos la asignación de la página que se asigna
main
para que cuando la llamadamunmap
regrese, no tenga a dónde regresar. Hay una pequeña posibilidad de que la función llame amunmap
esté solo en el límite de una página y el retorno sea exitoso, por lo que para estar perfectamente seguros de que esto funciona, probablemente tengamos que intentar desasignar dos páginas primero.Y, por supuesto, una variación sobre el mismo tema:
Simplemente desasigne la pila para que no tengamos ningún lugar al que volver. La misma advertencia que anular la asignación
main
: es posible que necesitemos desasignar dos páginas, excepto que tenemos que recordar que la pila probablemente disminuya (a menos que esté en PA-RISC o alguna otra arquitectura extraña como esa).Otra forma de tirar de la alfombra debajo de tus propios pies:
Depende del sistema operativo cómo el sistema maneja un límite de CPU de 0 segundos y con qué frecuencia se realiza la contabilización del tiempo de CPU. MacOS mata el proceso de inmediato, Linux requiere el ciclo while, otro sistema que probé no hizo nada incluso con un límite de un segundo y un ciclo while, no depuré más.
fuente
sh
Pánico interno instantáneo en Linux. Destina todos los procesos, incluido él mismo
Cmd
Pantalla azul instantánea en Windows. Termina el
Client/Server Runtime SubSystem
. Pskill debe estar instalado.fuente
killall init
También funcionaría?sudo killall init
En C (Compatible con Windows / Linux / (probablemente Unix / Freed BSD también)):
Ejemplo de uso:
En Windows compila con:
Y Linux:
Asumiendo que el compilador está instalado y en la variable PATH actual.
EDITAR: Técnicamente, arroja una excepción (generada por el procesador) en Linux, pero no hay tal mensaje en Windows. Entonces esta entrada probablemente no es válida; Sin embargo, creo que es genial: P
EDITAR: en ensamblador x86 (usando NAsm / YAsm)
Compilar con:
(Windows)
(Linux)
Desafortunadamente, esta forma también produce un volcado de núcleo en Linux, por lo que creo que es funcionalmente equivalente al método C; excepto más eficiente.
fuente
-Wall -Wextra -std=c99 -pedantic
y no hay advertencias en absoluto.Tomando las cosas literalmente de una manera tonta con Haskell:
fuente
Pitón
Usando el
multiprocessing
módulo , podemos generar otro hilo cuyo trabajo es comunicar con el proceso original a través de una cola, diciéndole cuándo salir:fuente
ANSI C
Sin optimización de código, el siguiente programa se cierra tan rápido: en realidad no se puede iniciar a pesar de que se compila en un programa válido
esto puede depender del sistema; comente si puede iniciarlo.
fuente
Bueno. Si simplemente
System.exit
no se permite llamar en Java, ¿qué hay de llamarlo mediante reflexión desde otro hilo?Busca el método de salida, genera un nuevo hilo y realiza una cuenta
regresivahasta que ese hilo mata el proceso al llamar a la salida a través de la reflexión.fuente
lenguaje de máquina x86, 1 carácter
Por lo general, puede hacer un ejecutable viable con una instrucción RET
fuente
C (Linux)
Versión suicida
Envía un SIGKILL a sí mismo.
Versión "Tu quoque mi fili"
Forks, entonces el hijo mata al padre.
fuente
Perl
Eso es todo.
Explicación: Lanza la excepción
Unimplemented
y sale inmediatamente.fuente
Lote y depuración
Un viejo pero bueno, funciona en máquinas DOS para un reinicio instantáneo del sistema. Bonificación en que es un guión destinado a ser interpretado por dos intérpretes diferentes e incompatibles.
reset.bat
La interpretación del archivo por lotes omite las instrucciones destinadas a la depuración y se alimenta para depurar para la interpretación. La línea en blanco después
goto
es necesaria para borrar el error en losdebug
resultados debido a que se alimenta un comando desconocido, que es el goto.fuente
Java
El siguiente código no se ha probado y solo funcionará en algunas plataformas.
fuente
sudo reboot
, en Windowsshutdown /r /t 0
sudo java Quitter
.Potencia Shell
Guarde esto como 'lastresort.ps1' y debería funcionar.
Si tiene problemas con el script que no se ejecuta debido a alguna política tonta, escriba esto antes de ejecutar el script:
fuente
TI-Basic 84
fuente
Python (una alternativa de una línea al OP)
Pensé que en realidad no había una mejor respuesta de Python que la que sugería el OP, pero no me gustó cómo eran tantas líneas, así que así es como se hace exactamente como lo hizo el OP, pero en una línea:
Puede hacer que esto sea una función y hará el trabajo por usted.
fuente
Mi propia idea, no participar
TIGCC (para Texas Instrumens TI-89, TI-89 Titanium, TI-92 +, TI-V200)
TI-Basic para las mismas calculadoras
Lo que hace el programa: Primero se elimina de la RAM. (No lo coloque en la ROM o no funcionará ...) Todavía puede ejecutarse porque durante la ejecución se crea y ejecuta una copia del programa.
asm(trap #2);
invoca el comando ASM4E424E750000
, que es el comando para restablecer la calculadora, eliminar su RAM (la ROM Flash permanece intacta) y reinstala todas las aplicaciones.EDITAR: Acabo de probar la versión básica. No se puede eliminar a sí mismo ...
fuente
Formato .com de MS-DOS
Escribe instrucciones no válidas (FFFF) en la memoria y luego las ejecuta, haciendo que NTVDM se bloquee.
Hexadecimal
Lenguaje ensamblador Debug.exe
fuente