Witam,
w jaki sposób sprawdzić czy dany program jest uruchomiony/czy dany pid istnieje? (pod windowsem)
nie zaprzęgając do tego .exec ?
Witam,
w jaki sposób sprawdzić czy dany program jest uruchomiony/czy dany pid istnieje? (pod windowsem)
nie zaprzęgając do tego .exec ?
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.
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.
No bo exec() powoduje tylko uruchomienie pewnego procesu ;)
Ty potrzebujesz raczej czegoś w stylu popen()
exec() zwraca obiekty typu Process, ktory mozna uzyc do zablokowania az sie caly proces wykona (waitFor()) albo pobrania strumieni in / out / err.
::. 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()
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;
}