Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    142

    [JAVA] Interrompere un processo Runtime

    Salve a tutti, questo è il mio primo post!

    Ho la necessità di interrompere un processo che ho creato con Runtime.exec() all'interno di un Thread.

    Normalmente vorrei aspettare (con waitFor) il valore di ritorno, ma se premo uno stop lo vorrei interrompere.

    Il comando eseguito dal processo è un altro .jar che mi utilizza la porta com. Quando questo rimane attivo (dal task manager rimane un processo java.exe di pochi MB ) mi occupa la porta e mi risulta bloccata quando provo a far ripartire l'applicazione.

    Esistono delle procedure per bloccare un processo anche se non è ancora terminato?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    La classe Process, oltre al metodo waitFor(), mette a disposizione il metodo destroy().

    Consulta la documentazione a riguardo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    142
    Grazie per il suggerimento!

    però cercavo un metodo alternativo


    Cmq ho cambiato strada

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da som
    però cercavo un metodo alternativo


    Metodo alternativo?

    Tipo questo:
    codice:
    private void metodoAlternativo(Process p) {
       p.destroy();
    }
    ?

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    142


    simpatico

    io volevo interrompere il processo da un metodo in cui non era dichiarato. In pratica in un thread avevo un run in cui il processo veniva lanciato e rimaneva in attesa dell' exitValue con un procWait, e un metodo di stop nel quale il processo non era dichiarato ma dal quale volevo interrompere l'attesa e se era possibile distruggere il processo ( usa la porta com e se rimane attivo me la tiene occupata)

    Siccome non sapevo come fare

    ora invece di usare il processo per utilizzare il jar esterno ho implementato una classe che fa più o meno lo stesso lavoro ( non faceva granchè.. mi era solo più comodo )

    Spero di essermi spiegato .. non essendo molto esperto potrei essere stato poco chiaro :master:

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Lo puoi fare se imposti correttamente le variabili nel thread:
    codice:
    public class TuoThread extends Thread {
       private Process p;
       ...
       public void run() {
          ...
          p = Runtime.getRuntime().exec( ... );
          int i = p.waitFor();
          ...
       }
    
       public void terminaProcesso() {
          p.destroy();
       }
    }
    Grossomodo la struttura dovrebbe essere questa.
    Da qualche parte istanzi il tuo thread e lo fai partire.
    Poi, quando vuoi interrompere il processo, richiami il metodo terminaProcesso() del tuo thread, che si occuperà di killarlo.

    E' probabile che tu debba utilizzare in modo appropriato il try/catch per catturare eventuali eccezioni in fase di kill (io non ho tenuto in considerazione questo perchè è solo un esempio).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    142
    che stupido avevo pensato ad una possibile soluzione ma avevo dichiarato il processo con runtime annessa e non solo la variabile processo!

    ri-modifico tutto e vedo se funziona!

    intanto ti ringrazio v

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.