¿Cómo apagar una computadora al instante (1 a 5 segundos) sin usar un interruptor / zócalo físico?


17

¿Hay algún comando / programa a través del cual pueda apagar mi sistema instantáneamente (1 a 5 segundos)?

Actualización (2015): Gracias a quienes han sugerido apagar usando el enchufe. :RE

Actualización (2016): @technophile sugirió que agregue información a la pregunta que describe la naturaleza del problema, principalmente qué escenario estaba tratando de resolver. Aquí está el escenario por el cual se hizo esta pregunta hace algunos años.

Estábamos construyendo un sistema para ser desplegado en espacios públicos como (aeropuertos, hoteles, etc.). Las personas pueden usar ese sistema para navegar por Internet, revisar su correo electrónico o incluso hacer reservas, etc., usando sus tarjetas de crédito. El sistema creado se aseguró de que un segundo usuario no pueda obtener información (correo electrónico, tarjetas de crédito) del usuario anterior de ese sistema, incluso si los softwares de keyloggers se instalan de alguna manera. ¿Cómo se aseguró el sistema? Bueno, los detalles no se pueden compartir porque esa no es información pública. pero desarrollamos una forma de tener siempre un Sistema Operativo nuevo (como si estuviera recién instalado) para un nuevo usuario del sistema. El único problema fue que tuvimos que apagar la máquina y volver a abrirla tan pronto como el primer usuario abandona la máquina.

Y quería que ese apagado fuera instantáneamente rápido (esa es la pregunta) y que el próximo arranque también sea muy rápido para lo que investigué e intenté un gran número de distribuciones de Linux desde Damn Small Linux a Slackware a Debian, etc. historia separada


1
Dado que el código más rápido es el que no se ejecuta, diría que la forma más rápida de apagar un sistema es no encenderlo. Explique lo que está tratando de lograr si necesita una respuesta específica.
Dmitry Grigoryev

2
@ Sam152 qué pared?
Choc

¿Desea especificar también "sin dañar mi sistema", o no es una preocupación?
Technophile

@Technophile no es un daño permanente para mi sistema, por supuesto. ¿Pero qué tienes en mente?
Choc

Mi propósito es aclarar lo que está preguntando y lo que está tratando de hacer. Yo trabajo en electrónica; Qué significa "instantáneamente" 1 segundo? 1 ms? 1us? 1ns? ¿Eres simplemente impaciente o hay alguna necesidad específica? ¿Cuáles son las consecuencias de un (por ejemplo) tiempo de apagado de 6 segundos? Estoy trabajando con un sistema integrado que corrompe su tarjeta SD si el apagado supera los 5 segundos cuando se mantiene presionado el botón de encendido. ¿Qué estás haciendo?
Technophile

Respuestas:


32
sudo shutdown -h now

99
Eso no apagaría un sistema al instante . ;)
Marcel Korpel

14
@Marcel Korpel: Tan instantáneamente como uno debería hacerlo sin dañar su sistema;)
Felix

@Felix: sigo escuchando que Linux es un sistema muy robusto y que no puede manejar los mismos "reinicios duros" que soportó mi Windows. Sería sorprendente;)
Gnoupi

2
@Gnoupi: no se puede construir ningún sistema operativo sin cierta vulnerabilidad a un apagado abrupto. De lo contrario, la respuesta al método de apagado más rápido sería tirar del cable de alimentación.
harrymc

1
Algunas versiones la sintaxis es diferente. "sudo shutdown -g0 -y -i5" (Solaris). Y, por supuesto, solo para dificultarlo, el valor exacto que sigue a "i" puede ser diferente para el apagado en diferentes sistemas. Creo que es 0 en muchos otros sistemas para apagar. Suspiro. Tengo que amar los estándares, ¡tantos para elegir!
Brian Knoblauch

14

No sugiero hacer lo siguiente si no se ve obligado por razones realmente especiales:

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

Es duro, brutal y puede considerarse un equivalente cercano a desconectar el cable de alimentación ...

La forma correcta es shutdown -h nowcon sudoantes cuando sea necesario.
Tal vez debería decir la manera legal ; ver abajo o mejor tl; dr.


Algunas palabras más , también conocido como La historia, Capítulo I
Al principio fue el init y será hasta el final.

Todo Linux depende del cuidado amoroso de init [ 1 ] [ 2 ] . Sin embargo, y no sin una cierta cantidad de ingratitud, hubo un tiempo en el que el buen Dios usuario root puede traicionar este amor y de repente killinit con un incontestable ( -9orden).
( El Libro de Etiqueta prescribe los recuentos, duques y usuarios de marquesas para invocar antes de a sudo).

Luego, algunos magos hicieron un hechizo para proteger a init (del Libro de man 2 init)

Las únicas señales que pueden enviarse al ID de proceso 1, el proceso init, son aquellas para las que init ha instalado explícitamente manejadores de señal. Esto se hace para asegurar que el sistema no se caiga accidentalmente.

(Nuestros espías informan [ U1 ] que init se encargará de 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Entonces el buen usuario root de Lord aprenderá las noticias y cambiará el comando kill -ABRT 1o kill -SEGV 1eso generalmente genera un kernel panic y un volcado de núcleos.

Funciona porque init es el primer proceso que se ejecuta y toma el número PID 1 [ 2b ] .

Esto es inseguro, imprudente y sientes que es el heraldo de un mal augurio y una maldición, pero si no puedes materializar las manos y desconectarlo ...

La maldición : no escribirá en el registro, no matará todos los procesos y esperará su finalización, no escribirá en el HDD actualizando correctamente los inodes ni desmontará los sistemas de archivos; ni siquiera se preocupe, guardará las opciones de las ventanas gráficas y los historiales de shell, y muchos otros más allá de nuestra imaginación ... como dijimos un equivalente cercano a desconectar el cable de alimentación o la batería de una computadora portátil.


La forma correcta
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam", lema de los caballeros templarios.
La forma legal (correcta) es usar shutdown[ 3 ]

sudo shutdown -h now

shutdown se encarga de que el sistema se desactive de manera segura. Todos los usuarios registrados reciben una notificación de que el sistema se está cayendo y ...

pero con -h nowellos no tendrán tiempo suficiente para hacer tanto ...


Algunas palabras más , también conocido como La historia, Capítulo II
Érase una vez algunos pasos lógicos que se sintieron desde el cielo sobre la gente de Unix:

Una vez que se han eliminado los procesos del sistema y se han desmontado los sistemas de archivos, el sistema se detiene / apaga o se reinicia automáticamente. Esto se realiza mediante el comando detener o reiniciar, que sincroniza los cambios en los discos y luego realiza la detención / apagado real o el reinicio. [ 4 ]

De hecho, hoy en día, no confiamos más en la existencia de las tres Moiras [ 5 ] del mundo de Linux , reboot, poweroffy halt[ 6 ] : la ciencia moderna de ls -l $(which poweroff halt reboot)y el de man rebootlos diferenciales nueva luz sobre esta era oscura y nos revelan que existe un solo comando verdadero que analiza todas sus opciones para que finalmente podamos pedir acciones que contradigan los nombres de sus comandos. ( halt -po reboot -ppara poweroff, shutdown -rpara reboot...)

Ahora que todo parecía ser claro y acogedor para todos, los rumores afirman [ 7 ] que en el inframundo del conjunto de herramientas systemd [ 8 ] se llevó a cabo una revolución que desconoce todo el mundo . Gracias a un ejército de cuñas de compatibilidad con versiones anteriores , no notamos en absoluto que reiniciar, apagar, detener [ 6 ] e incluso telinit [ 9 ] y apagar [ 3 ] ya están vinculados al nuevo rey systemctl [ 10 ]. Escucha toda la historia de la voz original de JdeBP The Bard [ 9 ] porque no tengo más aliento.

Si eres un seguidor del culto de Ubuntu, aún puedes estar consciente por un tiempo de todas esas afirmaciones [ 11 ] .


El medio de la Tierra halt -f, init, telinit, systemctl
Búsqueda para la solución más rápida que la correcta, pero del mismo modo inteligente.

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

Si está bajo systemd o no, debería poder detener la computadora sin invocar todos los procedimientos correctos de shudown (y más rápido):

  1. halt -f: especificando la opción-f (tenga en cuenta que debe -fevitar el procedimiento de apagado) con el comando anterior, con sudo poweroff -fo tal vez incluso con sudo reboot -f -h. De hecho, podemos leer man reboot(y equivalentes) sobre la necesidad de especificar la opción -fpara evitar llamar al cierre:

    Cuando se llama con --force o cuando está en el nivel de ejecución 0 o 6, esta herramienta invoca la llamada al sistema reboot (2) (con el argumento REBOOTCOMMAND aprobado) y reinicia directamente el sistema .

    De lo contrario, esto simplemente invoca la herramienta shutdown (8) con los argumentos apropiados sin pasar el argumento REBOOTCOMMAND.

    -f, --force
    No invoca shutdown (8) y en su lugar realiza la acción real que esperaría del nombre .

  2. Además, puede usar telinit [ 2b ] (o initdirectamente)

    sudo telinit 0    # or 6
    

    decirle a init que cambie el nivel de ejecución ... pero si es así, ¿por qué no matarlo directamente?

  3. En systemd puede usar la opción doble imprudente --force --force

    systemctl --force --force poweroff  
    

    Lectura del manual systemctl [ 10 ]

    -f, --force
    Cuando se usa con enable, sobrescribe los enlaces simbólicos en conflicto existentes.
    Cuando se utiliza con halt, poweroff,reboot o kexec, ejecute la operación seleccionada sin necesidad de apagar todas las unidades. Sin embargo, todos los procesos se eliminarán por la fuerza y ​​todos los sistemas de archivos se desmontarán o volverán a montar de solo lectura. Por lo tanto, esta es una opción drástica pero relativamente segura para solicitar un reinicio inmediato. Si --force se especifica dos veces para estas operaciones, se ejecutarán inmediatamente sin finalizar ningún proceso ni desmontar ningún sistema de archivos. Advertencia: la especificación de --force dos veces con cualquiera de estas operaciones puede provocar la pérdida de datos.

Ps> Inspírate sobre las variantes de la cola JdeBP The Bard [ 7 ] .


9

Puede apagar la máquina inmediatamente sin sincronizar discos escribiendo "o" en / proc / sysrq-trigger como root.

Como un script de shell se vería algo así

#!/bin/sh
echo o >/proc/sysrq-trigger

Si tiene permisos en / proc / sysrq-trigger, no tiene que habilitarlo a través de sysctl. Esa opción solo afecta la activación por teclado.

No recomiendo hacer esto en una máquina con ningún sistema de archivos que desee leer más tarde.

Utilizo esto en Google Compute Engine para eliminar instancias con plantilla justo antes de la marca de diez minutos para maximizar la rentabilidad de los trabajos en clúster, funciona muy bien.


55
Esta es la mejor respuesta a esta pregunta. OP dice claramente que quiere apagar el sistema de manera similar a como si estuviera desconectado del suministro eléctrico, no les importa el daño o "hacerlo correctamente". No entiendo por qué nadie puede entender eso.
Petr

1
ben lugar de oreiniciar (relevante desde que se actualizó la pregunta).
Kamil Maciorowski




2

Mantenga presionada la tecla de encendido durante unos 4 segundos, es bastante rápido.


1
Si lo hace, activar el interruptor de encendido es realmente más rápido;)
Gnoupi

Es lo mismo que cualquier otro método de apagado, suponiendo que el sistema operativo administre la energía.
harrymc

1
Si realmente no puede esperar unos segundos y va a matar la energía, use un sistema de archivos de diario como ext3 / ext4 para que no pierda tantos datos debido a escrituras no escritas.
CarlF

Si no busca una forma no programática / no de software de realizar el apagado, de lo contrario, la sugerencia de @Gnoupi es mucho más rápida. ;)
choc

2

En ciertas distribuciones de Linux, el apagado ofrece la opción -n. (Ver hombre apagado ). Sin embargo, ciertas distribuciones (como ubuntu que utiliza el sistema de arranque en lugar de sysvinit) no admiten su indicador, y este indicador (como se puede aprender de la página de manual) no está exento de riesgos. Aunque he estado usando esto durante años (en mi computadora portátil no me importa que todos los demonios se terminen correctamente, solo quiere que todo se elimine y mi memoria caché se enjuague) (es más rápido que un apagado normal y más seguro que tirar del enchufe (y amigos)). Podrías ver si esto resuelve tu problema.


2

Usé este pequeño script para apagar el sistema. En realidad, se usa esto para una broma en una máquina de "creación de prototipos": "¡Hola amigo, veamos qué hace ese increíble .sh!"

#!/bin/bash
echo 1 > /proc/sys/kernel/sysrq-trigger; #enables sysrq triggers
echo u > /proc/sysrq-trigger # remount the system as ready only
#edited# echo s > /proc/sysrq-trigger # sync all write-pending data to disk
sync
echo o > /proc/sysrq-trigger # shut off the system power.

(Este script imita lo mismo que presionar Alt+ SysRq+ u/ s/ ocomo se explicó anteriormente). Por supuesto, no causo una terminación anormal del sistema (las tablas mysql, etc. pueden fallar), así que úselas solo en máquinas ficticias. Nota: La sincronización puede llevar algo de tiempo. He visto que si el sistema tiene mucha memoria libre (para caché) y copia muchos archivos en un pen drive, la sincronización lleva más tiempo, pero lo recomiendo incluso para una broma.

Editar: es mejor usarlo en synclugar de escribir 's' en sysrq-trigger: escribir 's' no bloqueará la ejecución del script, por lo que después de solicitar que la memoria caché se escriba en el disco, la máquina se apagará inmediatamente. En contraste con el synccomando, syncregresará después de que se complete el proceso de escritura. Por lo tanto, la ejecución del script se bloqueará hasta que se complete el vaciado de la memoria caché.


1
¿No deberías 'antes' '? Además, como un bucle:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.