Ho un'app che non morirà: è andata via dal dock, ma la finestra rimane (con un beachball, se lo topo sopra). Sta usando nessuna CPU, ma voglio che vada via.
C'è qualcosa di più strong di "Force Quit", per davvero davvero uccidere un'app?
Se conosci il nome dell'app, puoi controllare in Activity Monitor per vedere se è ancora in esecuzione e provare la sua uscita forzata. Se ciò non funziona, prendi nota dell'ID di processo dell'app (pid). Vai al Terminale e digita kill [pid]
, sostituendo "[pid]" con il numero che hai annotato in precedenza. Se ciò non funziona, prova kill -3 [pid]
e se questo non funziona kill -9 [pid]
. Se il processo è di proprietà di un utente diverso (non è probabile), potrebbe essere necessario sostituire kill
con sudo kill
e digitare la password quando richiesto.
Se l'app non viene visualizzata in Activity Monitor o non puoi kill
, la finestra potrebbe rimanere bloccata da qualche altra parte e l'app semplicemente non è più in esecuzione. In questo caso, a volte (non sempre) può funzionare a killall SystemUIServer
o killall Dock
.
Se non funziona, dovrai disconnetterti e tornare indietro o riavviare. Le poche volte che sono arrivato a questo punto, l'app era così bloccata da impedire la disconnessione o lo spegnimento, quindi ho dovuto riavviare molto.
La finestra di chiusura forzata, killall
e kill
inviano tutti i segnali TERM dei processi per impostazione predefinita. Puoi utilizzare killall -kill
se non funziona.
The killall utility kills processes selected by name, as opposed to the selection by pid as done by kill(1). By default, it will send a TERM signal to all processes with a real UID identical to the caller of killall that match the name procname. The super-user is allowed to kill any process.
Se si esegue sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'
e si esce dall'applicazione dalla finestra di chiusura forzata, il segnale viene in genere visualizzato come -15 (TERM). Ma quando si esce da un processo in background (o un'applicazione che non viene mostrata nel Dock) da Activity Monitor, il segnale viene solitamente mostrato come -9 (KILL).
SIGTERM is the default signal sent to a process by the kill or killall commands. It causes the termination of a process, but unlike the SIGKILL signal, it can be caught and interpreted (or ignored) by the process. Therefore, SIGTERM is akin to asking a process to terminate nicely, allowing cleanup and closure of files. For this reason, on many Unix systems during shutdown, init issues SIGTERM to all processes that are not essential to powering off, waits a few seconds, and then issues SIGKILL to forcibly terminate any such processes that remain.
Ho avuto situazioni in cui Force Quit, Activity Monitor, kill
e altri metodi non hanno funzionato, e il mio Mac non è stato in grado di spegnerlo a causa di ciò.
In questo caso, un sudo shutdown -r now
ha funzionato quando nient'altro sarebbe, ed è probabilmente meglio che fare un arresto forzato tramite il pulsante di accensione.
Come nelle risposte precedenti, il modo più efficace per terminare qualsiasi processo è SIGKILL
, ad es. kill -9 process_id
.
Tuttavia, esistono processi che sono semplicemente impossibili per Force Quit
o kill
. Hanno chiamato come zombie
processi.
Ecco uno script breve che creerà un processo zombie
per due minuti:
perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'
Esegui lo script sopra nel Terminale e otterrai l'output, come il prossimo:
unkillable pid:50571
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 47380 47379 4006 0 31 0 2448416 2900 - S 0 ttys000 0:00.36 -bash
501 50570 47380 4006 0 31 0 2443512 1424 - S+ 0 ttys000 0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570 2006 0 0 0 0 0 - Z+ 0 ttys000 0:00.00 (perl)
501 12795 12794 4006 0 31 0 2448296 1752 - S+ 0 ttys001 0:00.75 -bash
501 50123 50122 4006 0 31 0 2448296 2688 - S+ 0 ttys002 0:00.14 -bash
Se controlli la colonna di stato per il processo non registrabile (in questo caso: 50571) vedi il flag Z
, che cosa significa zombie
.
Puoi provare a inviare qualsiasi segnale kill
(ad esempio kill -9 50571
) e il processo continuerà a esistere. Ad ogni modo, non danneggia molto il tuo sistema, perché in realtà non esiste, occupa solo la tabella dei processi.
Nell'esempio sopra, in 120 secondi verrà cancellato.
Questo è quello che dovresti fare:
Un processo come questo è meglio rimosso in modalità provvisoria se hai intenzione di tentare una disinstallazione.
Saluti, Bryan
Leggi altre domande sui tag applications lion macos