Process ID

Hui, jetzt wird kompliziert.
Ich möchte mir die prozessID des Threads ausgeben lassen.
Also habe ich mir die Anleitung von http://www.rgagnon.com/javadetails/java-0467.html gelesen und umgeändert.

public class JNIJavaHowTo extends Thread
{
 int pid; 
 int tnr, pause;

 JNIJavaHowTo(int tnr, int pause)
 {
 this.tnr = tnr;
 this.pause = pause;
 }

 public void run()
 {
 JavaHowTo jht = new JavaHowTo();
 getPid(jht, pause); 
 }

 public static void main(String[] args) 
 {
 Thread t1 = new JNIJavaHowTo(1,100);
 t1.start(); 
 }

 public static long getPid(JavaHowTo o, int pause)
 {
 try {
 System.out.printlno.getCurrentProcessId());
 schreibe(pause);
 }
 catch (Exception e){ }
 return o.getCurrentProcessId();
 }

 public static void schreibe(int pause)
 {
 int i = 0;
 while(i 
Diese Klasse wird extern aufgerufen. Also es läuft permanent ein "Service" und wenn bestimmte Sachen eintreten, wird JNIJavaHowTo.getPid() aufgerufen. 


    
    ...
    JavaHowTo jht = new JavaHowTo();
    JNIJavaHowTo.getPid(jht,1);
    ...



Das Problem ist, dass immer die PID des laufenden Service ausgegeben wird. Ich möchte aber die PID der laufenden Threads! Hab ich da irgentwo ein Denkfehler drin???

Danke Steffi

Hallo!

Das Problem ist, dass immer die PID des laufenden Service
ausgegeben wird. Ich möchte aber die PID der laufenden
Threads! Hab ich da irgentwo ein Denkfehler drin???

Nach meinem Verständnis ist eine PID eine Prozess-ID. Alle Threads die du erzeugst laufen in dem gleichen Prozess und haben somit die gleiche Prozess-ID. Das ist also eine 1:n Beziehung von Prozess zu Threads.
Das bedeutet, dass die PID die du bekommst richtig ist, wenn der Thread in deinem Service erzeugt wurde.

Grüße,
Harald

Hm, da hast du leider Recht.
Kann man das denn irgentwie umgehen? Also zb. dann eigenständige Prozesse draus machen?

steffi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin :smile:

Hm, da hast du leider Recht.
Kann man das denn irgentwie umgehen? Also zb. dann
eigenständige Prozesse draus machen?

steffi

Hmm, ich habe es noch nicht getestet, aber mit der Klasse „Runtime“ kannst du eigene Prozesse starten.

Runtime r = Runtime.getRuntime();
r.exec("java MyClass");

Dann startet eine neue JVM und somit läuft diese auch in einem eigenen Prozess.

Viel Glück :wink:

Harald