In che modo Windows uccide esattamente un processo?


10

Non ho familiarità con il modo in cui i processi vengono uccisi in Windows. In Linux, un kill "caldo" invia un segnale (15) che il processo può gestire istanziando un gestore di segnali. Un cold kill è il segnale (9) che il sistema operativo gestisce uccidendo il processo con forza.

Come posso "uccidere" un processo in Windows? Come viene gestito dal sistema operativo e dal processo? Quali azioni esegue il sistema operativo? Esiste un modo multipiattaforma per rispondere a una richiesta di chiusura / chiusura?


1
Per i lettori: il segnale 15 è SIGTERM, 9 è SIGKILL.
user1686

Si prega di accettare una risposta, se la domanda è stata risolta.
Oliver

Risposte:


11

"End Task" (e taskkill) sembra pubblicare un WM_CLOSEmessaggio nelle finestre del programma. (Lo stesso viene fatto quando si fa clic sul pulsante ×"Chiudi".) Se il programma non si chiude entro qualche tempo, all'utente viene richiesto di terminare il programma con forza.

"Termina processo" e taskkill /fusa TerminateProcess().


1
+1, WM_CLOSE inviato all'app; dopo che X ha chiesto all'utente di forzare l'uccisione, Windows rimuove il processo dallo scheduler, chiude tutti gli handle (che possono far scattare il processo se il kernel sta elaborando uno di quegli handle), quindi recupera lo spazio di memoria (questa è la versione davvero breve del processo).
Chris S,

Il terzo modo è ntsd -p <pid> -c q, che utilizza il ntsddebugger; Non sono sicuro di cosa accada quando un programma viene ucciso in quel modo. ( pokes @Chris )
user1686

5
cosa succede se il programma non ha una finestra?
IttayD,

1
@IttayD: Quindi non c'è alcuna voce in Task Manager per utilizzare "Termina operazione" su :) Ho appena provato taskkille risponde con: "Questo processo può essere terminato solo forzatamente (con l'opzione / F)". Quindi sì, l'unica scelta rimasta è TerminateProcess().
user1686

1
@IttayD: Nota che su Windows i servizi (demoni) sono scritti in modo diverso dalle applicazioni dell'utente; possono ricevere richieste di stato e richieste di controllo da Service Manager, quindi è possibile un grazioso arresto.
user1686

0

Sysinternals (ora parte di Microsoft) offre un'utilità chiamata pskill che può essere utilizzata dalla riga di comando per terminare i processi sul sistema locale o su sistemi remoti.

Il solito modo per terminare i processi in Windows in un ambiente GUI è usare Task Manager.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.