PID programu

0

Witam,

w jaki sposób sprawdzić czy dany program jest uruchomiony/czy dany pid istnieje? (pod windowsem)
nie zaprzęgając do tego .exec ?

0

Bardzo czesto robi sie to w taki sposob ze gdziestam na boku tworzysz plik z pidem, albo otwierasz socketa ktory swiadczy ze program jest uruchomiony, rozne takie. Z Javy bez uzycia kodu natywnego nie wyszukasz po pidzie, no chyba ze wywolasz ps (linux, cygwin), ale to wymagaa exec() ktorego nie chcesz.

0

Przeszukiwałem (wydaje mi się że bardzo skrupulatnie) Java Glossary i nie znalazłem rozwiązania.. szkoda..
Dlaczego nie exec, a no dlatego, że nie potrafię pewnie z niego korzystać. Mianowicie kiedy wykonuję jakieś polecenie choćby .excec("tasklist"); to nie umiem sprawdzić czy polecenie wykonało się prawidłowo czy też nie. W tym cały ból mój...

dziękuje za odp.

0

No bo exec() powoduje tylko uruchomienie pewnego procesu ;)
Ty potrzebujesz raczej czegoś w stylu popen()

0

exec() zwraca obiekty typu Process, ktory mozna uzyc do zablokowania az sie caly proces wykona (waitFor()) albo pobrania strumieni in / out / err.

0

::. dobrze pisze

Dajesz np

    Runtime rt = Runtime.getRuntime();
    Process proc;
    proc = rt.exec("cmd /C date " + datestr);

A potem masz dostęp do metod

proc.getErrorStream()
proc.getInputStream()
proc.getOutputStream()

0

Dziękuje Panowie za odpowiedzi. Z góry założyłem, że się nie da nie doczytując dokumentacji nt. .exec.
I faktycznie Wasze uwagi okazały się trafne..

Przykład:

    private Integer sharePointUser(String username) {
      Runtime r = Runtime.getRuntime();
      Process p = null;
      try {
          p = r.exec("c:\\windows\\system32\\net.exe use O: \\\\192.168.1.2\\www\\"+username+" xyz /USER:backupuser");
          p.waitFor();
          if(p.exitValue() != 0) {
            return 1;
          }
          return 0;
      } catch (Exception e) {
          //System.out.println("error executing " + cmd[0]);
      }
      return 1;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1