src/solaris/classes/java/lang/UNIXProcess.java.linux

Print this page

        

*** 217,243 **** throw new IllegalThreadStateException("process hasn't exited"); } return exitcode; } ! private static native void destroyProcess(int pid); ! public void destroy() { // There is a risk that pid will be recycled, causing us to // kill the wrong process! So we only terminate processes // that appear to still be running. Even with this check, // there is an unavoidable race condition here, but the window // is very small, and OSes try hard to not recycle pids too // soon, so this is quite safe. synchronized (this) { if (!hasExited) ! destroyProcess(pid); } try { stdin.close(); } catch (IOException ignored) {} try { stdout.close(); } catch (IOException ignored) {} try { stderr.close(); } catch (IOException ignored) {} } /* This routine initializes JNI field offsets for the class */ private static native void initIDs(); static { initIDs(); --- 217,259 ---- throw new IllegalThreadStateException("process hasn't exited"); } return exitcode; } ! private static native void destroyProcess(int pid, boolean force); ! public void destroy(boolean force) { // There is a risk that pid will be recycled, causing us to // kill the wrong process! So we only terminate processes // that appear to still be running. Even with this check, // there is an unavoidable race condition here, but the window // is very small, and OSes try hard to not recycle pids too // soon, so this is quite safe. synchronized (this) { if (!hasExited) ! destroyProcess(pid, force); } try { stdin.close(); } catch (IOException ignored) {} try { stdout.close(); } catch (IOException ignored) {} try { stderr.close(); } catch (IOException ignored) {} } + public void destroy() { + destroy(false); + } + + public Process destroyForcibly() { + destroy(true); + return this; + } + + @Override + public boolean isAlive() { + synchronized (this) { + return !hasExited; + } + } + /* This routine initializes JNI field offsets for the class */ private static native void initIDs(); static { initIDs();