Perché dire a un'app di smettere di uscire a volte da uno zombi, e come posso ucciderlo?

3

Ho due script che aprono e chiudono un'app; diciamo che è il Calculator.app incorporato. Lo script "start" utilizza /usr/bin/open per avviare l'app, quindi un AppleScript a una riga per impostare la visibilità dell'app su false . Questa è la totalità dello script "stop":

#!/bin/bash

osascript -e 'tell app "Calculator" to quit'

Sto eseguendo questi script da un LaunchDaemon che li chiama in determinati orari fissi della settimana.

Lo strano comportamento che sto vedendo è che a volte, dopo lo script "stop", l'icona Dock dell'applicazione mantiene il puntino (suggerendo che sia ancora in esecuzione). Tuttavia:

  • facendo clic con il pulsante destro del mouse sull'icona del dock viene visualizzato il messaggio "L'applicazione non risponde"
  • forzare l'uscita dal menu dell'icona del Dock non fa nulla
  • ps non mostra alcun processo della Calcolatrice in esecuzione

E, la maggior parte sconcertante, tentando di lanciare nuovamente Calcolatrice (tramite open , tramite Spotlight, o facendo doppio clic sulla sua icona) produce una finestra di dialogo modale che dice L'applicazione "Calcolatrice" non è più aperta.

lsof mostra queste voci che potrebbero essere correlate:

COMMAND     PID   USER   FD     TYPE             DEVICE   SIZE/OFF     NODE NAME
Spotlight   443 jteach   54r     DIR                1,4        102 28977573 /Applications/Calculator.app
Notificat   476 jteach  txt      REG                1,4      37933 29214948 /System/Library/Frameworks/NotificationCenter.framework/PlugIns/com.apple.ncplugin.calculator.appex/Contents/Resources/Assets.car
Notificat   476 jteach    8r     REG                1,4      37933 29214948 /System/Library/Frameworks/NotificationCenter.framework/PlugIns/com.apple.ncplugin.calculator.appex/Contents/Resources/Assets.car

Le mie domande:

  • Perché il mio script di "interruzione" potrebbe non riuscire a chiudere in modo pulito l'app?
  • A parte il riavvio, c'è un modo per far uscire l'app da questo stato di zombie?
  • Come posso modificare il mio script per essere sicuro che l'app si chiuda correttamente?
posta RenaissanceBug 01.03.2018 - 18:43
fonte

1 risposta

1

Sembra che tu abbia trovato una soluzione al tuo problema, ma nel caso in cui altri stiano cercando altri strumenti per il loro toolbelt Unix-y, eccone alcuni:

quit

Ho mantenuto lo script di shell di Jon Stovell esci ( link per il download diretto ) in giro da diversi anni, e sembra fare un ottimo lavoro di smettere di app. Prova una varietà di metodi e proverà a consentire a un'app di "salvare le modifiche", se necessario.

appswitch

Un altro strumento molto utile è appwitch di Nicholas Riley ( pagina GitHub ) che ti permetterà di fare un intero slew di cose alle app, incluso chiuderle (o nasconderle o mostrare le loro finestre ma non renderle attive, ecc).

pkill

killall è già stato menzionato, ma sarei negligente se non aggiungessi che potresti anche usare:

pkill -x Calculator

per sbarazzarsi della fastidiosa app. Non ho visto "zombie dock", quindi non posso decidere se risolvere il problema, ma se lo fa, potrebbe essere preferibile a due comandi sudo .

Una nota su open

Hai menzionato che stai avviando l'app con open e quindi usando AppleScript per nasconderlo. Le app ben educate dovrebbero rispondere al flag -j a open per ottenere ciò senza AppleScript, cioè:

open -j -a Calculator

(vedi man open per dettagli, come "-j Lancia l'app nascosta"; da non confondere con -g che significa "Non portare l'applicazione in primo piano." Non posso mai ricordare quale è quale quindi uso quasi sempre open -g -j -a Foo ogni volta che voglio lanciare un'app ma non rubarla.)

    
risposta data 08.10.2018 - 06:54
fonte

Leggi altre domande sui tag