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
execreemplaza el proceso actual con algo más.[es el comando más corto que pude encontrar que es inofensivo (es un alias paratest)fuente
execel[comando :)~ $ echo $PATH/?->/bin/X /bin/[ /bin/w. Fish shell me dio otros dos comandos.wEs 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 sobrescribeMOVel 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
JMNpropia parte sin control. Para deshacernos de él, necesitamos otroMOVpara borrar elJMN... pero eso significa que necesitamos otroMOVpara borrar esoMOV, y así sucesivamente. Para hacer que todo el programa desaparezca sin dejar rastro, tenemos que organizar de alguna manera una solaMOVinstrucción para borrar tanto a sí mismo como al menos otra instrucción.Ahí es donde
SPLentra: 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. PeroSPLhace 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 1hayan ejecutado las dos instrucciones, ahora hay cuatro procesos en la cola, todo sobre la ejecución de la últimaMOV. Esto es suficiente para borrarJMNtanto elSPLs como elMOVpropio, y también deja laptrcelda de instrucción comoDAT 0, 0indistinguible del núcleo vacío que la rodea.(Alternativamente, podríamos haber reemplazado la
ptrinstrucción conMOV 1, 1, que habría sido convertidaMOV 1, 0por 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 en0realidad significa "la dirección de esta instrucción", mientras que la dirección en1realidad 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
TerminateProcesslugar de usarProcess.Killfuente
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í
kills el proceso de ejecución de ruby / irb en * nix.fuente
Apple 2 Basic
fuente
POKEescribe unENDtoken sobre elPRINTtoken, y luego el segundoPOKEescribe un terminador de comando sobre el primero". CuandoGOTOse ejecuta, termina ejecutándose enENDlugar dePRINTy 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
quitpero 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
gccy otros compiladores a los que no les importan los pequeños detalles comomainno ser una función.Funciona en
x86plataformas: el programa se cierra inmediatamente.195 es el código de operación de la
retinstrucción.fuente
mainse encuentra en.dataporque es un int, no en.text, y.datase 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
revokede la misma manera. Linux no tiene un prototipo, MacOS lo hizo en el pasado, pero solo devuelve errores en las versiones recientes.revoketoma 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
mainpara que cuando la llamadamunmapregrese, no tenga a dónde regresar. Hay una pequeña posibilidad de que la función llame amunmapesté 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 initTambién funcionaría?sudo killall initEn 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 -pedanticy no hay advertencias en absoluto.Tomando las cosas literalmente de una manera tonta con Haskell:
fuente
Pitón
Usando el
multiprocessingmó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.exitno 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
Unimplementedy 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
gotoes necesaria para borrar el error en losdebugresultados 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 0sudo 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