001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.tools.server;
028:
029: import org.cougaar.tools.server.system.ProcessStatus;
030:
031: /**
032: * Client support for a remote Process running on the server.
033: */
034: public interface RemoteProcess {
035:
036: /**
037: * Get the listenable API for this process, which
038: * allows the client to add/remove OutputBundle listeners.
039: */
040: RemoteListenable getRemoteListenable() throws Exception;
041:
042: /**
043: * Get the ProcessDescription.
044: */
045: ProcessDescription getProcessDescription() throws Exception;
046:
047: /**
048: * Is the process alive -- note that <tt>isRegistered()</tt> implies
049: * <tt>isAlive()</tt>.
050: *
051: * @return true if the process is running
052: */
053: boolean isAlive() throws Exception;
054:
055: /**
056: * @return the exit value of the dead process, or
057: * <tt>Integer.MIN_VALUE</tt> if "isAlive()"
058: */
059: int exitValue() throws Exception;
060:
061: /**
062: * Wait for the process to exit, then return the exit value.
063: */
064: int waitFor() throws Exception;
065:
066: /**
067: * Wait at most <tt>millis</tt> for the process to exit, then return
068: * the exit value.
069: */
070: int waitFor(long millis) throws Exception;
071:
072: /**
073: * Destroy this process if it <tt>isAlive()</tt>.
074: */
075: int destroy() throws Exception;
076:
077: //
078: // These require (isAlive()).
079: //
080:
081: /**
082: * Trigger the process's JVM to produce a Thread-Dump, which is
083: * printed to Standard-Out and will be sent back through the
084: * listener(s).
085: * <p>
086: * This is Operating System specific and may not be supported
087: * on all hosts.
088: * <p>
089: * See the JVM documentation for the "stackTrace" syntax.
090: */
091: void dumpThreads() throws Exception;
092:
093: /**
094: * List all running processes on the host, marking the
095: * process as <tt>ProcessStatus.MARK_SELF</tt>.
096: * <p>
097: * If <tt>(showAll == false)</tt> then only process information
098: * is only gathered for the process and it's children.
099: * <p>
100: * This is Operating System specific and may not be supported
101: * on all hosts.
102: *
103: * @see ProcessStatus
104: */
105: ProcessStatus[] listProcesses(boolean showAll) throws Exception;
106:
107: }
|