2016-03-10 25 views
7

Il mio programma Java crea un processo nel modo seguente:Daemon processo java - c'è una cosa del genere?

ProcessBuilder builder = new ProcessBuilder("phantomjs.exe crawl.js"); 
Process proc = builder.start(); 

Nel caso in cui il programma Java termina bruscamente (potrebbe sempre capitare), il processo di phantomjs (che non è un processo Java) potrebbe rimanere in vita e non ci sarebbe non essere in alcun modo per terminarlo

Voglio che il processo phantomjs venga terminato quando il processo java di chiusura termina (sia bruscamente che non).

C'è un modo per definire l'istanza Process come un oggetto "daemon" che termina automaticamente quando termina il suo super processo (che è il processo java che esegue il codice sopra)?

+0

Perché non utilizzare [hookdown hooks] (https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#addShutdownHook (java.lang.Thread))? –

+0

Il blocco per l'arresto non aiuta quando il processo si chiude bruscamente – KidCrippler

+0

@GentiSaliu Non penso che il tag javascript sia fuorviante. Si potrebbe trovare un modo per fare ciò di cui ho bisogno all'interno del codice javascript che esegue phantomjs. – KidCrippler

risposta

1

Il API documentation sembra abbastanza definita, senza alcuna qualifica o donnola dicitura:

Il sottoprocesso non viene ucciso quando non ci sono più riferimenti all'oggetto processo, ma piuttosto il sottoprocesso continua ad eseguire in modo asincrono.

Quindi il genitore deve ucciderlo, non andrà via quando il genitore termina.

+1

Sì, ho letto anche la documentazione. Mi chiedo se c'è qualche framework o libreria di terze parti che avvolge l'oggetto Process e fornisce la funzionalità desiderata. – KidCrippler

+0

@KidCrippler: giusto, capisco che questo fornisca un valore limitato. ho capito se questo non è giusto e c'è qualche tipo di opzione che qualcuno lo abbatterà. –