Como se kinokijufdijo, Windows no es Unix. En Unices y Linux, de shutdownhecho está involucrado en el proceso de apagado completo. Es el programa que envía mensajes de advertencia regulares a los usuarios que han iniciado sesión y que escribe el /run/nologinarchivo para evitar un mayor inicio de sesión un poco antes del tiempo de apagado programado.
En Windows NT, este no es el caso.
La acción "Apagar" en el "botón de encendido" en el menú de inicio del Explorador de Windows, la opción de menú "Apagar" en el Administrador de tareas, REBOOT /Sen TCC o Tomar comando, y otros programas de aplicaciones que le permiten apagar el sistema. llamando directamente a una de las dos llamadas a la API Win32: InitiateSystemShutdownEx()o ExitWindowsEx(). No hacen cosas indirectamente al ejecutar el shutdownprograma. (Eso realmente necesita más código que hacer que simplemente llamar a la llamada a la API de Win32). El shutdownprograma, cuando se realiza un apagado local, también llama a esas mismas llamadas a la API de Win32.
En realidad winlogon, csrssy smssesos son los programas que cierran Windows NT. En particular, es lo winlogonque hace el trabajo principal de procesar las solicitudes de apagado diferido.
¡Eres realmente un respondedor sensato! Me gustó la forma en que te remontaste a la situación real a través de mi perfil.
Mukul Kumar
Tenga en cuenta que en los sistemas Linux, el shutdowncomando no participa en absoluto en el proceso de apagado completo; Si bien puede enviar mensajes de advertencia o tocar / ejecutar / nologin, todo lo que hace con respecto al apagado real es enviar el comando apropiado a systemd, init, etc., y salir. El proceso init o su sistema de reemplazo moderno realmente hace el trabajo de apagar el sistema.
Michael Hampton
No, M. Hampton, enviar los mensajes y detener los inicios de sesión es una parte completa del procedimiento de apagado completo. No pienses que mágicamente se ha ido con Linux. Las páginas del manual para dos Linux shutdownestán justo en frente de usted. Pensar que es tan incorrecto como el sinsentido en la Introducción a Linux en TLDP que dice que "UNIX no está hecho para ser cerrado". De hecho, UNIX se cerró, y hay muchos libros en los últimos 40 años para profesionales de UNIX que cubren el procedimiento completo, con mensajes de advertencia a los usuarios como paso # 1.
JdeBP
Incluso hay libros para profesionales de Linux. Conectaría la Guía de estudio LPIC de Rod Smith , que se encuentra shutdownen la página 22, pero no está en mi biblioteca. Lo siento, M. Smith. (-: Mi biblioteca tiene los gustos de la Referencia SVR5 de Coffin (el paso de advertencia de los usuarios descrito en las páginas 355 y 683), una Guía del administrador del sistema SCO UNIX (advertencias a los usuarios como primer paso de cierre en las páginas 52–53), e incluso Fielder / cazador de administración de sistemas UNIX (todo el capítulo 6 está a punto de parada, con la advertencia a los usuarios al comienzo del capítulo) Uno puede encontrar muchos más libros para los profesionales que cubre esto..
JdeBP
55
No.
Explorer no llama a este comando cuando cierra desde el menú Inicio.
Es posible apagar el sistema con una llamada a la API Win32 (la respuesta de @ JdeBP proporciona grandes detalles al respecto si está interesado). El comando es solo una forma conveniente de hacerlo desde un script, una tarea programada o el cuadro de diálogo Ejecutar.
En realidad, shutdown.exeni siquiera hace un cierre elegante.
kinokijuf
¡Cuidado con esa respuesta! Explorer no llama a ese comando, pero otros procesos que cierran o reinician Windows sí lo hacen: y no es solo 'una forma conveniente de hacerlo' si el script o la tarea programada es un instalador o una tarea de mantenimiento programada de su administrador de sistemas.
Nigel Heffernan
1
Eso no lo hace "necesario", Nilo. Vea el contexto de la pregunta (que no está en la pregunta, pero está en mi respuesta y en lo que se señala allí) para ver la refutación que el interrogador estaba cuestionando, y la declaración acerca de shutdownque el interrogador hizo originalmente. (Estas partes de) los instaladores a menudo se escriben en lenguajes compilados que solo llaman a la API Win32, por cierto.
JdeBP
8
Según lo explicado por ultrasawblade (upvote), el apagado del sistema es una llamada de la API Win32 a: ExitWindowsEx
El enlace también tiene un ejemplo sobre cómo implementar un apagado desde C. Además, puede hacerlo desde C # usando P / Invoke (invocación de plataforma). pinvoke.net tiene un montón de firmas disponibles para su uso: http://www.pinvoke.net/default.aspx/user32/exitwindowsex.html
shutdown -s -t 0
, un planoshutdown
solo muestra ayuda.Respuestas:
Su pregunta, por supuesto, se origina en su respuesta en https://codegolf.stackexchange.com/a/24011/18907 , en particular en
kinokijuf
el comentario de la revisión inicial de su respuesta.Como se
kinokijuf
dijo, Windows no es Unix. En Unices y Linux, deshutdown
hecho está involucrado en el proceso de apagado completo. Es el programa que envía mensajes de advertencia regulares a los usuarios que han iniciado sesión y que escribe el/run/nologin
archivo para evitar un mayor inicio de sesión un poco antes del tiempo de apagado programado.En Windows NT, este no es el caso.
La acción "Apagar" en el "botón de encendido" en el menú de inicio del Explorador de Windows, la opción de menú "Apagar" en el Administrador de tareas,
REBOOT /S
en TCC o Tomar comando, y otros programas de aplicaciones que le permiten apagar el sistema. llamando directamente a una de las dos llamadas a la API Win32:InitiateSystemShutdownEx()
oExitWindowsEx()
. No hacen cosas indirectamente al ejecutar elshutdown
programa. (Eso realmente necesita más código que hacer que simplemente llamar a la llamada a la API de Win32). Elshutdown
programa, cuando se realiza un apagado local, también llama a esas mismas llamadas a la API de Win32.En realidad
winlogon
,csrss
ysmss
esos son los programas que cierran Windows NT. En particular, es lowinlogon
que hace el trabajo principal de procesar las solicitudes de apagado diferido.Otras lecturas
shutdown
. Páginas de manual de FreeBSD 9.2 . 2013-03-19.shutdown
.systemd
páginas de manual . 2013. Freedesktop.org.shutdown
.upstart
páginas de manual . 2009. Canonical Ltd.InitiateSystemShutdownEx
. MSDN Corporación Microsoft.ExitWindowsEx
. MSDN Corporación Microsoft.REBOOT
. Tome Command / TCC Help. JP Software.fuente
shutdown
comando no participa en absoluto en el proceso de apagado completo; Si bien puede enviar mensajes de advertencia o tocar / ejecutar / nologin, todo lo que hace con respecto al apagado real es enviar el comando apropiado a systemd, init, etc., y salir. El proceso init o su sistema de reemplazo moderno realmente hace el trabajo de apagar el sistema.shutdown
están justo en frente de usted. Pensar que es tan incorrecto como el sinsentido en la Introducción a Linux en TLDP que dice que "UNIX no está hecho para ser cerrado". De hecho, UNIX se cerró, y hay muchos libros en los últimos 40 años para profesionales de UNIX que cubren el procedimiento completo, con mensajes de advertencia a los usuarios como paso # 1.shutdown
en la página 22, pero no está en mi biblioteca. Lo siento, M. Smith. (-: Mi biblioteca tiene los gustos de la Referencia SVR5 de Coffin (el paso de advertencia de los usuarios descrito en las páginas 355 y 683), una Guía del administrador del sistema SCO UNIX (advertencias a los usuarios como primer paso de cierre en las páginas 52–53), e incluso Fielder / cazador de administración de sistemas UNIX (todo el capítulo 6 está a punto de parada, con la advertencia a los usuarios al comienzo del capítulo) Uno puede encontrar muchos más libros para los profesionales que cubre esto..No.
Explorer no llama a este comando cuando cierra desde el menú Inicio.
Es posible apagar el sistema con una llamada a la API Win32 (la respuesta de @ JdeBP proporciona grandes detalles al respecto si está interesado). El comando es solo una forma conveniente de hacerlo desde un script, una tarea programada o el cuadro de diálogo Ejecutar.
fuente
shutdown.exe
ni siquiera hace un cierre elegante.shutdown
que el interrogador hizo originalmente. (Estas partes de) los instaladores a menudo se escriben en lenguajes compilados que solo llaman a la API Win32, por cierto.Según lo explicado por ultrasawblade (upvote), el apagado del sistema es una llamada de la API Win32 a: ExitWindowsEx
El enlace también tiene un ejemplo sobre cómo implementar un apagado desde C. Además, puede hacerlo desde C # usando P / Invoke (invocación de plataforma). pinvoke.net tiene un montón de firmas disponibles para su uso: http://www.pinvoke.net/default.aspx/user32/exitwindowsex.html
fuente
No es necesario.
shutdown.exe
es solo una utilidad para apagar una computadora local o remota. Parece queshutdown.exe
utiliza la API nativa 'sNtShutdownsystem
. Mientras que Windows usaExitWindowsEx
( como ya se mencionó ).fuente