Ternimating a process that is started from insite a java program

Hi,
I have a question:
I am using Java 1.1 running on a HP-UX platform(HP-UX 11.0).
I start a "unix shell script" from inside a java process. Everything starts and runs perfectly fine. If for some reason I MANUALLY kill the java program with a "kill" command, the unix process that was started by the java process is not getting killed. (effectively the signal is not getting passed on to the child process). Is there a way to fix this?
Thanks in Advance.
Srikanth
[email protected]

Here is what the java API docs say about the Process class:
The Runtime.exec methods create a native process and return an instance of a subclass of Process
that can be used to control the process and obtain information about it. The class Process
provides methods for performing input from the process, performing output to the process,
waiting for the process to complete, checking the exit status of the process, and destroying
(killing) the process.
The Runtime.exec methods may not work well for special processes on certain native platforms,
such as native windowing processes, daemon processes, Win16/DOS processes on Win32, or
shell scripts. The created subprocess does not have its own terminal or console. All its
standard io (i.e. stdin, stdout, stderr) operations will be redirected to the parent process
through three streams (Process.getOutputStream(), Process.getInputStream(), Process.getErrorStream()). The
parent process uses these streams to feed input to and get output from the subprocess.
Because some native platforms only provide limited buffer size for standard input and output
streams, failure to promptly write the input stream or read the output stream of the
subprocess may cause the subprocess to block, and even deadlock.
The subprocess is not killed when there are no more references to the Process object, but
rather the subprocess continues executing asynchronously.
There is no requirement that a process represented by a Process object execute
asynchronously or concurrently with respect to the Java process that owns the Process object.
[/b[
So the docs state that this class may not work with shell scripts. Which means that it may be no way to deal with this.
Good luck
Calin

Similar Messages

  • Start a WS application from within a java program

    Hi,
    I need to start a WebStart application from within a java program. Therefore I develeoped a class which starts javaws.exe within its main-method like this:
    try {
    Runtime.getRuntime().exec(
    "c:\\java web start\\javaws.exe http://a.b/c.jnlp"
    } catch (Exception e) {
    e.printStackTrace();
    And that did not work. Java Web Start tries to start the .jnlp program but returns with the message, that the app-desc|applet-desc|installer-desc|component-desc is missing. But it is there: It is an applet and thus I defined an applet-dec.
    I tried to do it from a command line with the followinf command:
    java -Djnlpx.home="C:\abc" -cp "C:\abc\javaws.jar" com.sun.javaws.Main http://a.b/c.jnlp
    And that works. But using this command from within my jjava prog using the Runtime.exec() method does not work.
    By the way, simply type "javaws http://a.b/c.jnlp" at the command line does not work.
    Can anybody help me? How may I start a .jnlp program within another java program.
    Kind Regards,
    Tobias Neubert

    Hi,
    I recently had a quite similar problem. At least the error message by the Java Web Start application on Mac OS X complained about the same error (app-desc|applet-desc|installer-desc|component-desc). It turned out to be some bad invisible characters in the jnlp file. I copied some sample from a web page which for some reason contained some unicode chars that the parser doesn't like. Use a different text editor or the less command on unix to see if there are some strange characters in you jnlp file.
    But it seems strange that it does work from the command line and not from your code.
    -Stefan

  • Executing a Java Program from within a Java Program

    I need to execute the following Java Program from withing another Java Program. The office toolbar command line is
    D:\WINDOWS\system32\java.exe -cp E:\Development\Eclipse\UpdateServer\Classes -server -showversion UpdateServer
    I can find no combination of ProcessBuilder commands, including those that include "Cmd.exe /c" that will make this program run from within another Java Program. All the examples I can find only show how to run Windows *.exe programs. I keep getting error 123 from ProcessBuilder.start(), but I can find no documentation for error 123.

    Assuming your code didn't get mangled by the forum
    (it's missing one "), it may be that your "-cp
    E:\\Develop.." argument is getting quoted as it has a
    space in it; try passing "-cp" and "E:\\Develop..."
    as two arguments.That worked; specifically the following tested OK:
    ProcessBuilder pb = new ProcessBuilder("D:\\WINDOWS\\System32\\Java.exe", "-cp", "E:\\Development\\Eclipse\\UpdateServer\\Classes\\", "-server", "-showversion", "UpdateServer" );
    pb.directory(new File("E:\\Development\\Eclipse\\UpdateServer\\Classes\\"));
    try{
         Process p = pb.start();
         InputStream is = p.getErrorStream();
         InputStreamReader isr = new InputStreamReader(is);
         BufferedReader br = new BufferedReader(isr);
         String line;
         while ((line = br.readLine()) != null)
              System.out.println(line);
         p.waitFor();
    }catch(IOException ioe){
    I was sure I tried that exact same code before, and it did not work, but now it does, at least at the top level (when it is in main of a test program). I will have to wait to try it until later when it is buried deep in a subroutine.

  • How to run java programs from a master java program?

    Hello,
    I have several java programs which run from the command prompt. I am seeking help with code for starting java programs from within a java program. For example, a program called master.java works something like this:
    import java.*;
    create connection pool
    create variables and result sets
    start/run slave1.java (var1, var2);
    start/run slave2.java (var3, var4, var5);
    start/run slave3.java (var1, var4);
    end of program master.java
    Each of the slave.java programs will run for up to an hour. I do not want the master.java program to pause for each slave program to stop. Instead, the master program will keep running and multiple slave programs will be running simultaneously with the master program. When a slave program starts, it is on its own. Also, if possible, I would like to have each of these slave.java programs open in a new separate command window, so I can observe each slave program running in separate windows.
    Any suggestions for code or helpful documentation are greatly appreciated.
    Thank you,
    Logan

    Thank you all.
    At the bottom of master.java I have successfully started a batch file with these lines:
    String jcmd = "cmd.exe /c start c:/data/simulations/MsgViewCount2.bat";
    Process proc = Runtime.getRuntime().exec(jcmd);
    But I still cannot get a java program to start. Here is one variation I have tried:
    String [] cmdArray = new String[2];
    cmdArray[0] = "java";
    cmdArray[1] = "slave1";
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(cmdArray);
    This compiles, and no errors occur, but nothing happens.
    Regarding this comment:
    Why Runtime.exec? Either make the slaves Runnable or
    just call their main() methods.
    Oh, I see. Sepearate output. :PNone of the slave.java programs have any output.
    Thanks again.

  • Executing C program from with a java program

    How do you call a c program from within a java program, and parse arguments into that program and return something.
    Cheers for any reply...

    Read http://www.javaworld.com/jw-12-2000/jw-1229-traps.html

  • Problem with creation of a jar file from inside a java program

    Hi,
    I am trying to create a jar file at runtime from within a java program.
    I am able to create a jar file just fine using:
    String[] jarArgs = new String[3];
    jarArgs[0] = "cvf";
    jarArgs[1] = "C:\temp\myjar.jar";
    jarArgs[2] = "C:\temp\this";
    sun.tools.jar.Main main1 = new sun.tools.jar.Main(System.out, System.err, "jar");
    main1.run(jarArgs);However, when I look at the jar it puts the absolute path to the files inside such as:
    C:\temp\this\is\my\package\Class.class
    instead of only this\is\my\package\Class.class
    When running the jar command from the command line it works just fine and I have the relative paths in my jar file.
    Does anyone have any experience with this and could help me out?
    Thanks in advance
    Edited by: mruf on Apr 11, 2008 1:51 AM

    Shouldn't jarArgs[2] = "-C C:\temp\this"

  • Getting resultset from some other java program

    how could i getting resultset from some other java program?
    plz

    a resultset is directly linked to your (prepared) query.
    for performance(and synchronization) reasons, you do want to retrieve the data as fast as possible and then release it.

  • C++ process hangs when started from Java

    I am trying to execute a c++ code from java on a remote Windows machine. In order to deal with the remote part, I have created a Web service from where the actual command is run using Runtime.exec(). The c++ exe is not being called directly from the java code. I have a batch file that eventually calls the exe.
    The problem is, both java and c++ processes hang. The java code on server side does handle the output stream and error stream. Also, the c++ code is logging everything in a file on Windows. The strange thing is that, when I remove the WS call and run the java code on server side as a standalone java program, it succeeds. Also, execution of the batch file alone does not hang. Here is the java code:
    public class RunCPlusPlusExecutable {
    public int runExecutable() {
        int exitValue = 0;
        try {
            Process p = null;
            Runtime rt = Runtime.getRuntime();
            System.out.println("About to execute" + this + rt);
            p = rt.exec("c:/temp/execcplusplus.bat");
            System.out.println("Process HashCode=" + p.hashCode());
            StreamProcessor errorHandler = new StreamProcessor(p.getErrorStream(), "Error");
            StreamProcessor outputHandler = new StreamProcessor(p.getInputStream(), "Output");
            errorHandler.start();
            outputHandler.start();
            exitValue = p.waitFor();
            System.out.println("Exit value : " + exitValue);
            if (exitValue == 0)
                System.out.println("SUCCESS");
            else
                System.out.println("FAILURE");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (Exception e) {
        return exitValue;
    class StreamProcessor extends Thread {
        private InputStream is = null;
        private String type = null;
        private InputStreamReader isr = null;
        private BufferedReader br = null;
        private FileWriter writer = null;
        private BufferedWriter out = null;
        StreamProcessor(InputStream is, String type) {
            this.is = is;
            this.type = type;
        public void run() {
            try {
                isr = new InputStreamReader(is);
                br = new BufferedReader(isr);
                writer = new FileWriter("*******path to log file********");
                out = new BufferedWriter(writer);
                String line = null;
                while ((line = br.readLine()) != null) {
                    Date date = new Date();
                    out.write("[" + type + "]: " + date + " : " + line);
                    out.newLine();
                writer.flush();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                try {
                    if (br != null)
                        br.close();
                    if (isr != null)
                        isr.close();
                    if (out != null)
                        out.close();
                    if (writer != null)
                        writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
    String line = null;
                while ((line = br.readLine()) != null) {
                    Date date = new Date();
                    out.write("[" + type + "]: " + date + " : " + line);
                    out.newLine();
                writer.flush();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                try {
                    if (br != null)
                        br.close();
                    if (isr != null)
                        isr.close();
                    if (out != null)
                        out.close();
                    if (writer != null)
                        writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
    The WS server is running from some admin user. And I have been running the standalone java program from some other user. It seems that the c++ executable is giving referenced memory error when being executed from WS call. There are pop-ups citing the error with OK and Cancel buttons(visible when logged in as admin). The error states
    The instruction at 0x05473030 referenced memory at 0x000001d4. The memory could not be read
    Any idea what is causing the problem and how to debug it? Why does this memory error comes only when the exe is run through WS call? Please note that I won't be able to debug the c++ code and the web service is an apache axis2 service.
    Thanks

    How can I know? Its your environment, not mine. The only thing we know is that when running the stuff through one path things blow up and when you run them through another path, things don't blow up. User rights is an obvious suspect, but not necessarily the actual problem. Generally when rights are the problem, you get some form of "access denied" exception, not a code hang.
    Another likely possibility is that of network settings; perhaps your server goes through a proxy and your local applications do not, or the other way around.
    Yet another likely possibility is that the version of Java used is different, or different versions of libraries are no the classpath causing differences in behavior. There is only one way to figure it out: get to know your environment very well and through solid reasoning and experimentation try to figure out where the breaking point is. It all starts with answering this question: what might be different in the environment of the web server, and outside of it? I can't know, only you can. Good luck.

  • How to start a browser from within a java program?

    I want to make a help file for my java program and want to run the browser from the menu of my program.
    How can I start my browser from my program?
    A small code will be helpful.
    Thanks.
    Niteen

    This should work on Windows without having to know where the browser is located. See http://www.javaworld.com/javaworld/javatips/jw-javatip66.html for more details
      public static void viewHtml(URL url, boolean fixHtmlExtension){
          String cmd = "rundll32 url.dll,FileProtocolHandler " + url.toExternalForm();
          if (fixHtmlExtension){
            //There is a bug in rundll32. For http requests, it doesn't like .html or .htm extensions,
            //but replacing the 'm' with '%6D' works. 
            //This fix is not needed for file requests.
            if (cmd.endsWith(".htm")){
              cmd = cmd.substring(0,cmd.length()-1) + "%6D";
            else if (cmd.endsWith(".html")){
              cmd = cmd.substring(0,cmd.length()-2) + "%6Dl";
          Process process = Runtime.getRuntime().exec(cmd);
          try{
            process.waitFor();
          catch(InterruptedException e){

  • How can native executable files be started from within a Java application.

    Hi Everyone,
    I am currently working on an application that will have the ability to start a program within Windows. What I intend on having is a button within my GUI that can start Microsoft Word. I am completely lost as to where I should begin in order to make this work. If anybody has any pointers they will be greatly appreciated. Thanks.
    Regards
    D

    Hi ,
    easy:
    Runtime.getRuntime().exec(new String[]{path,name});
    see:
    http://java.sun.com/j2se/1.3/docs/api/java/lang/Runtime.html
    HTH

  • How to terminate and restart a java program from a controling java program?

    I have a situation where my program needs to run exactly once each one
    hour. This is a huge program that creates a lot of threads and opens
    lot of resources. After one hour has lapsed, I want to terminate this
    program (as if Exit(0) was performed on it or as if Ctrl C was pressed
    from the command line to terminate a running program) and then run it again and so on repeat the cycle each hour. This will guarantee that
    all the resouces taken by the programs are freed or if some threads were still blocked on i/o, are indeed terminated each hour.
    The java program does not have any user interface and it is run from the
    command line.

    if you can change the program to be controlled, you could make it listen for commands on some networkport for shutting it down.
    If this is not an option you could start OS programs to kill the first program. On Unix System kill will do, but you need the process id so you'd need another os call ...
    You could do the os calls in two ways
    a) execute shell commands (search the forum on how to do that
    b) write a little C wrapper for the os call so you can call them from JNI (Java Native Interface)
    I do not know of any way do this kind of thing directly
    regards
    Spieler

  • Why do we obtain a java.rmi.MarshalException during a stateless session bean method invocation from a client java program?

    Hello,
    we're using iAS SP3.
    We deployed a stateless session bean that has a business methods with a Vector as argument (put (vector, String)).
    If we call it from a servlet, it works fine. But when we try to call it from a thread, started in a standalone java client program, we obtain a java.rmi.MarshalException.
    We tried to use Vector and HashSet objects as arguments, but we always obtain this kind of exception. It seems strange because a similar
    method that returns a Collection of objects (getAll) works fine. This is the our bean Remote Interface:
    public interface Receive extends EJBObject {
    public void putMessage(Message message, java.lang.String la) throws RemoteException; // it works fine!!!
    public void putMessages(java.util.Vector messages, java.lang.String la) throws RemoteException; // it doesn't work!!!
    Collection getAll (java.lang.String la) throws RemoteException, EJBException; // it works fine!!!!
    This is the java client stack trace:
    java.rmi.MarshalException: CORBA MARSHAL 0 No; nested exception is:
    org.omg.CORBA.MARSHAL: minor code: 0 completed: No
    org.omg.CORBA.MARSHAL: minor code: 0 completed: No
    at java.lang.Class.newInstance0(Native Method)
    at java.lang.Class.newInstance(Class.java:241)
    at com.sun.corba.ee.internal.iiop.ReplyMessage.getSystemException(ReplyMessage.java:93)
    at com.sun.corba.ee.internal.iiop.ClientResponseImpl.getSystemException(ClientResponseImpl.java:82)
    at com.sun.corba.ee.internal.corba.ClientDelegate.invoke(ClientDelegate.java:199)
    at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:248)
    at ejb._Receive_Stub.putMessages(_Receive_Stub.java:731)
    at commlayer.Receiver.run(Receiver.java:67)
    Does anyone know how to solve this problem?
    Thank you in advance,
    Maurizio

    This is big bug!
    This seems to occur when you try to return complex objects (e.g. a vector of classes or even the Date class).
    As a workaround you can add this Ejb or module to the iPlanet Classpath (NT via kregedit, Sun via iasenv skript.).
    This helps but i really don't know why.
    It should be fixed in 6.5, maybe. We'll see.
    Regards

  • Displaying a shell from within a Java program

    Hi,
    For some long and twisted reason, I need to execute native programs from a Java program. Since this program is only every intended to be run on Linux, this doesn't bother me breaking the x-platform rules for Java! So, Runtime.exec() is the normal way to do this.
    However, Runtime.exec() runs executes the command and then dishes basck the output once it's finished. The external program I wish to run takes a while and actually prints various pieces of feedback during its processing. I'd like to display this feedback to the user as it happens, rather than dumping it all at the end.
    I can't think of anyway to do this. I've been looking for "Java shells" but they are reimplemented shells with only let you run classes on the classpath. Any ideas from the gurus around here?
    Cheers

    import java.util.*;
    import java.io.*;
    class StreamGobbler extends Thread
    InputStream is;
    String type;
    StreamGobbler(InputStream is, String type)
    this.is = is;
    this.type = type;
    public void run()
    try
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line=null;
    while ( (line = br.readLine()) != null)
    System.out.println(type + "> " + line);
    } catch (IOException ioe)
    ioe.printStackTrace();
    public class GoodLinuxExec
    public static void main(String args[])
    if (args.length < 1)
    System.out.println("USAGE: java GoodLinuxExec <cmd>");
    System.exit(1);
    try
    Runtime rt = Runtime.getRuntime();
    System.out.println("Execing " + args[0]);
    Process proc = rt.exec(args);
    // any error message?
    StreamGobbler errorGobbler = new
    StreamGobbler(proc.getErrorStream(), "ERROR");
    // any output?
    StreamGobbler outputGobbler = new
    StreamGobbler(proc.getInputStream(), "OUTPUT");
    // kick them off
    errorGobbler.start();
    outputGobbler.start();
    // any error???
    int exitVal = proc.waitFor();
    System.out.println("ExitValue: " + exitVal);
    } catch (Throwable t)
    t.printStackTrace();
    stolen from this article and adapted to suit an os which does not start with the letter W.

  • How to call a remote external c++ program from a local java program?

    local java program pass some parameters to a remote C++ program and get the result from that C program output.

    You could use a tcp/ip connection (e.g. with Sockets), and pass the parameters as Strings in the socketstream.

  • How to call up an executable file (eg. MSPaint) from within my java program

    How to call up an executable file (eg. MSPaint) from within my java program

    Ummm... why would you want to get MSPaint anyway? Even in the absense of real software, Java's own graphics tools are way more sophisticated - with a little time and effort, you could write a simple paint package that beat MSPaint hands down.

Maybe you are looking for

  • Ooops...I manually moved iTunes music folder to my new external hard drive

    So I thought I was smart and manually moved my iTunes music folder to my new external hard drive. I've changed the location in Preferences but can't locate my music through iTunes. What do I do now? My library is on my external hard drive, but I read

  • E-mail won't fit the screen, anyone help?

    Hey all- I just "upgraded" (sorry, frustrated with this issue) my Curve to the 9350 and for every e-mail I receive I have to scroll left and right to be able to view the whole e-mail or use the zoom feature on every e-mail to make it fit the screen. 

  • How to update row when data contains single quote  ?

    Hi, Please see this query: update query_tab set  title='It's common knowledg' where id='1121';I have this update query coming from .NET, but abviously this is error since single quote in the text (title column) given by user gives wrong meaning to sq

  • How do I make a multi-line heading show up as a single line in the Table of Contents?

    I'm writing a document where the headings often have a line break in them for the sake of formatting. When I generate a Table of Contents, they show up as two entries on the same page instead of as a single heading. For example, if I have a section l

  • Firefox Opening new windows reverts to original Window

    Just started with this problem, when I open a new window which is my preference rather than Tabs I find that whereas it used to open the new window and that was active, it is now opening a new window and then reverting to the original one. Any ideas?