Riavvio di un Mac con un'applicazione bloccata

0

Mi sono appena reso conto che non so come OS X gestisca le applicazioni.

Oggi Google Chrome si è bloccato sul mio OS X Yosemite 10.10.2. Dopo che si è bloccato, ho semplicemente smesso usando "Force quit". Ho persino inviato un rapporto ad Apple.

Il Dock continuava a mostrarlo come "in esecuzione", ma cliccando su "Forza esci" non aveva alcun effetto. Ho riavviato sia il Finder che il Dock, ma Chrome ha continuato a mostrare "in esecuzione". Tuttavia, nessun processo che mi ricorda di "Chrome" è stato elencato in Monitor attività o in ps aux in un terminale.

Quindi ho deciso di riavviare la mia macchina ed è stato imbarazzante:

QuindistavoriavviandoperchéChromenonrispondeva,malamiamacchinaharifiutatodiriavviarsiperchéprimadovevochiudereGoogleChrome,chenoneratraiprocessiinesecuzione.Fortunatamente,Applenonhaancorarimossoilpulsantediaccensionedailorolaptop.

Quandosuccede?Qualefile"lock" devo rimuovere per comunicare a OS X che un'applicazione "in esecuzione" non è in realtà in esecuzione?

PS. Non è un comportamento simile a MS Windows 95? Che peccato ...

    
posta Antonio Sesto 24.04.2015 - 17:46
fonte

1 risposta

1

Nella rarissima occasione in cui mi è successo in passato, ho iniziato a trafficare con% script% di script per sapere cosa sta succedendo. Uno script pronto per l'uso è dtrace .

Quindi, la prossima volta che riscontri questo problema, gioca con esso come segue:

$ sudo opensnoop -ve

o limitando l'output a ciò che ti aspetti:

$ sudo opensnoop -ve | grep -i chrome

I processi di breve durata potrebbero non essere visualizzati nell'output opensnoop , quindi un'altra opzione è il framework di tracciamento dei limiti della funzione disponibile a ps . Molto probabilmente, la tua versione OSX avrà punti di ingresso semplici definiti per il livello VFS (chiamalo dump_vfs.d):

#!/usr/sbin/dtrace -s

#pragma D option quiet
#pragma D option switchrate=10hz

dtrace:::BEGIN {
    printf("%-12s %6s %6s %-12.12s %-12s %s\n", "TIME(ms)", "UID",
        "PID", "PROCESS", "CALL", "DIR/FILE");
}

fbt::VNOP_CREATE:entry,
fbt::VNOP_REMOVE:entry {
    this->path = ((struct vnode *)arg0)->v_name;
    this->name = ((struct componentname *)arg2)->cn_nameptr;
    printf("%-12d %6d %6d %-12.12s %-12s %s/%s\n",
        timestamp / 1000000, uid, pid, execname, probefunc,
        this->path != NULL ? stringof(this->path) : "<null>",
        stringof(this->name));
}

Chiamarlo è simile a sopra:

$ sudo dtrace -s dump_vfs.d

Un'abilità featticamente vicina può essere raggiunta dal comando dtrace , specialmente se si sospetta che il processo sia sospeso in un ciclo di eventi, pur continuando ad accedere al livello fs usando le chiamate di sistema.

Questo potrebbe essere un po 'eccessivo, dal momento che la scelta più pragmatica sta probabilmente colpendo il pulsante di accensione. Dal momento che hai accennato al fatto che hai inviato un rapporto ad Apple, puoi controllare di nuovo nei seguenti percorsi:

~/Library/Logs/DiagnosticReports/
/Library/Logs/DiagnosticReports/

Questo dovrebbe darti ulteriori indicazioni sul motivo per cui l'applicazione si è bloccata in questo modo.

La tua curiosità riguardo al sistema operativo che gestisce tali situazioni può probabilmente essere in parte attenuata esaminando i sorgenti del kernel XNU a fs_usage . Ad un certo punto, il processo di spegnimento avviato tramite Finder verrà eseguito in un timeout, che quindi registra i tentativi di SIGTERM non riusciti (estrarre dalla mia versione locale 2782.1.97 copia dei sorgenti del kernel di Darwin):

    [...]
    for (p = allproc.lh_first; p; p = p->p_list.le_next) {
        if (p->p_shutdownstate == 1) {
            printf("%s[%d]: didn't act on SIGTERM\n", p->p_comm, p->p_pid);
            sd_log(ctx, "%s[%d]: didn't act on SIGTERM\n", p->p_comm, p->p_pid);
        }
    }
    [...]

Ciò indica che l'applicazione bsd/kern/kern_shutdown.c potrebbe mostrare le voci del registro pertinenti. A seconda di una potenziale situazione di blocco live relativa a un file contenuto in una partizione montata su rete che ha appena perso il suo segnale di livello 1, il kernel entrerà in un ciclo di attesa da 100 a 200 secondi, a seconda di alcune impostazioni di timeout del montaggio VFS.

Come sidenote: ho avuto pochissima stabilità alla gioia, con Chrome sul mio MBP, principalmente perché ritengo che gli aggiornamenti recenti del driver core nvidia all'interno di Console insieme a funzionalità di gestione dell'alimentazione elevate e ora appnap, combinati con i recenti progressi nella gestione del plugin shockwave di detto browser, ha causato più volte il caos. Inoltre, Chrome nel 2014 per me è stato il più assetato di tutti i browser.

Ci sono probabilmente una mezza dozzina di altri scenari sul motivo per cui sei stato accolto con questa GUI di feedback non motivata. Nessuno dei quali viene nemmeno lontanamente vicino ai problemi cui si fa riferimento brevemente citando Win95:).

Basta premere il pulsante di accensione, già!

    
risposta data 02.06.2015 - 00:57
fonte

Leggi altre domande sui tag