# Prozess beenden auf Unix



## Guest (16. Sep 2004)

hi

hab ne frage!
Ich führe auf Unix ein Java-Programm aus!
ich starte es über telnet: 


```
java programm
```

zurzeit beende ich es ganz einfach mit Ctrl + C!
problem dabei ist, dass im hintergrund der process immer noch läuft!
ich will ihn nicht jedes mal von hand beenden (mit kill -9 prozessid)!! wie kann ich das ändern?

Gruss Flyer2004


----------



## Pennywise (16. Sep 2004)

Sezt in deinen Programmcode an der Stelle, wo das Programm aufhören soll ein:
System.exit(0);

Sollte hoffentlich helfen.

Oder hast du das Programm nicht selber geschrieben.


----------



## Flyer (16. Sep 2004)

doch hab ich...nur das problem ist, das ich das programm über telnet beende...mit Ctrl+C!
und dann müsste ich im Programm irgendwie wissen das ich es beendet habe!


----------



## Pennywise (16. Sep 2004)

```
public class ??? imlements KyListener {

.....
.....

   //Konstruktor
    public ???() {
    
        addKeyListener(this);
    
    }

    public void keyPressed(KeyEvent event) {

        if(event.getKeyCode() == KeyEvent.VK_CONTROL + KeyEvent.VK_C) {
        
            System.exit(0);
        
        }        

    }

    public void keyReleased(KeyEvent event) {}

    public void keyTyped(KeyEvent event) {}

}
```

Weiß aber leider net wie du auf telnet zugreifen kannst.
So kannst du jedenfalls in deiner Programmkonsole direkt schließen.[/code]


----------



## Flyer (16. Sep 2004)

hmm...du hast mich glaub falsch verstanden!

ich will gar keine konsole schliessen...damit hätte ich kein programm! ich drücke im "TELNET" CTRL+C und dann soll es auch die Prozesse im Hintergrund meines Javaprogramms schliessen!


----------



## Guest (16. Sep 2004)

Versuch's damit
	
	
	
	





```
...
Runtime.getRuntime().addShutdownHook(
  new Thread() {
    public void run() {
      System.out.println("...und Tschüß.");
    }
  }
);
...
```


----------



## Bleiglanz (17. Sep 2004)

na jetzt kommst du daher und erzählst, dass dein Programm zusätzliche Threads aufmacht

Ein Thread terminiert genau dann, wenn seine run() Methode endet ("returniert") - wenn du das nicht willst, musst du eben von aussen eingreifen

Was macht das Hauptprogramm (main), das du von der Konsole aufrufst?

RTFM wie man Threads "von aussen" beendet (interrupt usw)!


----------



## Guest (18. Sep 2004)

@Bleiglanz
Wovon schreibst du überhaupt?


----------



## Bleiglanz (20. Sep 2004)

ich schreibe davon, dass du in 


> ich drücke im "TELNET" CTRL+C und dann soll es auch die Prozesse im Hintergrund meines Javaprogramms schliessen!


scheinbar sagen willst, dass deine Anwendung mehrere Threads startet? richtig?


----------



## thE_29 (20. Sep 2004)

@bleiglanz: hast du schon mal mit linux gearbeitet?
wenn du da ein java prog ausführst, sind das ca. 5 - 10 prozesse die da gestartet werden, das meint er 


beende es halt nicht mit ctrl +c sondern ctrl + a oder so, weil ich weiß nicht ob du  ctrl + c abfangen kannst!

aber bei den restlichen einfach auf den tastendruck warten und dann beenden!


----------



## Bleiglanz (20. Sep 2004)

@thE_29

ich arbeite auch unter linux, wenn ich allerdings ein Konsolenprogramm mit Strg-C beende, dann werden alle zugehörigen Java-Prozesse gekillt

darum kommt mir das Verhalten von Flyer komisch vor


----------



## thE_29 (20. Sep 2004)

aso!

naja, eigentlich beenden sich ja alle prozesse (auch bei strg c, habs grad probiert)

ich "würg" halt nie wirklich ein programm so damit ab, aber ob unter telnet das gleiche passiert ist ne frage!

aaabbbbbeeer, wennst nen timer oder thread hast und dann mit strg c abwürgst, glaube ich bleiben die am leben (ist mir schon 1mal passiert) und dann hattest du vorher recht... 

außerdem baut man eine gewisse tastenkombi ein, damit ein programm sich beendet und net den standard kill key!


----------

