¿Cómo mata Windows un proceso exactamente?

10

No estoy familiarizado con cómo se matan los procesos en Windows. En Linux, una muerte "en caliente" envía una señal (15) que el proceso puede manejar al instanciar un controlador de señal. Una señal de muerte fría es (9) que el sistema operativo maneja al matar el proceso con fuerza.

¿Cómo puedo "matar" un proceso en Windows? ¿Cómo lo maneja el sistema operativo y el proceso? ¿Qué acciones realiza el sistema operativo? ¿Hay una forma multiplataforma de responder a una solicitud de matar / cerrar?

IttayD
fuente
1
Para los lectores: la señal 15 es SIGTERM, 9 es SIGKILL.
user1686
Acepte una respuesta, si su pregunta ha sido respondida.
Oliver

Respuestas:

11

"Finalizar tarea" (y taskkill) parece publicar un WM_CLOSEmensaje en las ventanas del programa. (Lo mismo se hace cuando hace clic en el botón ×"Cerrar"). Si el programa no sale en algún momento, se le indica al usuario que finalice el programa de manera forzada.

"Proceso de eliminación" y taskkill /fuso TerminateProcess().

usuario1686
fuente
1
+1, WM_CLOSE enviado a la aplicación; después de que X time le pida al usuario que fuerce la eliminación, Windows elimina el proceso del programador, cierra todos los identificadores (que pueden activar el proceso si el núcleo está procesando uno de esos identificadores), luego reclama el espacio de memoria (esta es la versión realmente corta del proceso).
Chris S
La tercera forma es ntsd -p <pid> -c q, que usa el ntsddepurador; No estoy seguro de qué sucede cuando un programa se mata de esa manera. ( golpes @Chris )
usuario1686
55
¿Qué pasa si el programa no tiene una ventana?
IttayD
1
@IttayD: Entonces no hay ninguna entrada en el Administrador de tareas para usar "Finalizar tarea" en :) Acabo de intentarlo taskkilly responde con: "Este proceso solo puede finalizar de forma forzada (con la opción / F)". Entonces, sí, la única opción que queda es TerminateProcess().
user1686
1
@IttayD: Tenga en cuenta que en Windows, los servicios (daemons) se escriben de manera diferente a las aplicaciones del usuario; pueden recibir consultas de estado y solicitudes de control del Administrador de servicios, por lo que es posible una parada elegante.
user1686
0

Sysinternals (ahora parte de Microsoft) ofrece una utilidad llamada pskill que se puede usar desde la línea de comandos para eliminar procesos en el sistema local o en sistemas remotos.

La forma habitual de eliminar procesos en Windows en un entorno GUI es utilizar el Administrador de tareas.

Pausado hasta nuevo aviso.
fuente
-1

¡Con Cygwin puedes usar una matanza multiplataforma!

Tony Roth
fuente