Perché questo processo non può terminare?

4

Direcentemisonoimbattutoinunproblemaincuiilmioprogrammadiretenonpotevacollegarsiaunaportaperchéeragiàinuso.Hoapertoilmonitordell'attivitàel'horealizzato(chiamato"server") era già in esecuzione da prima, anche se avevo chiuso la finestra e si supponeva che fosse terminato. Esci o Forza Esci sul processo non fare nulla. Ho anche riavviato il computer ma era ancora lì! Questo non è successo con il mio programma prima. Ho persino digitato il terminale kill 4517 e non è successo nulla. Aiuto?

    
posta slartibartfast 07.05.2012 - 01:33
fonte

2 risposte

4

OS X utilizza un sistema di avvio dei processi chiamato launchd che consolida le funzioni fornite dagli script Init, crontab e altri in sistemi * nix (vedi l'articolo di Wikipedia per una panoramica di alto livello e Documenti dello sviluppatore Apple sui daemon e gli agenti di avvio per i dettagli). Una delle abilità di launchd è di mantenere attivo un processo lanciato, se così definito dal suo file di configurazione - in tal caso, il processo verrà riavviato ogni volta che viene terminato. Il tuo problema con un processo apparentemente persistente tra i riavvii e la terminazione manuale sembra molto simile a un caso di processo avviato launchd con una chiave keepAlive .

launchd i file di configurazione sono nel formato plist e si trovano in

  • ~/Library/LaunchAgents : solo gli agenti per l'account utente corrente
  • /Library/LaunchAgents e /Library/LaunchDaemons - agenti e demoni per tutti gli account utente
  • /System/Library/LaunchAgents e /System/Library/LaunchDaemons - agenti e demoni a livello di sistema

e di solito sono nominati nella notazione inversa del dominio ( tld.domain.process.plist ). A seconda che l'account utente di server sia tuo o meno (non puoi dire, dato che lo hai cancellato), dovresti cercare in uno dei primi due luoghi sopra per un probabile plist (se hai installato Xcode, puoi QuickLook facilmente). Se trovato, il tuo server è effettivamente controllato da launchd. La procedura corretta per fermarlo è rimuoverla dall'elenco dei processi launchd tramite

launchctl unload <tld.domain.process>

che scaricherà e interromperà il processo (nota che ometti il suffisso plist ).

C'è anche una GUI per gestire i file launchd , Peter Borg's Lingon (assicurati di avere "Lingon", non "Lingon 3", che è una versione stupida sicura per l'uso di vaniglia), che potrebbe essere più comodo del rooting manuale attraverso il file posizioni.

    
risposta data 07.05.2012 - 12:49
fonte
2

Provalo.

    sudo kill -9 4517

Dove 4517 è il PID del processo.

Se il processo ritorna con un nuovo PID, qualcosa lo ha rilanciato. Vedi la risposta di kopischke su come affrontarlo.

    
risposta data 07.05.2012 - 03:44
fonte

Leggi altre domande sui tag