Executing system commands like cd on Linux from Java Code

Hi,
I need to execute a few system commands (like cd, ls, tar, etc.,) on RedHat Linux 7.1 from Java code. Any ideas plz.
best wishes,
Issac

Since this thread mentioned using the DOS START command
from an exec(), I was wondering whether anyone else is
seeing the odd behavior I am.
Most of the examples showing how to read stdout and stderr
while the process is running show simple loops that use
getInputStream and getErrorStream and do read's until they
get back -1. Most of these examples are insensitive to the
state of the Process.waitFor that happens elsewhere and sort
of rely on the -1 and the waitFor happening roughly together.
Whenever I use this technique to launch an arbitrary DOS
command (e.g. Runtime.exec("dir")), it works fine, and
everything seems to terminate as expected.
However, when my command is something like:
Runtime.exec("cmd /c start my.bat")
where I deliberately use the START command to fork off
a different process, something odd happens.
Those simple read loops get an initial burst of stdout/stderr
bytes from the "start" part of the command. But then eventually,
these loops do a "read" which blocks on those InputStreams. Now,
even if my Process.waitFor returns (because the start returned
immediately), those read loops stay blocked **until that script
started by 'start' runs to completion**. It is like the child
of the child is holding those streams open somehow.
I found that by doing something like an InputStream.available() or
a BufferedReader.ready( ) check before dropping into the read,
and allowing the Process.waitFor completion to exit those read loops,
them I get what I expect -- namely immediate return from the START,
but apparently complete copies of stdout and stderr.
Curiously, in the case where the reads block until the child process
started by START terminates, they still don't get the child's/child's
stdout and stderr. It is just a long duration thread block that
yields no data.
Can anyone explain what is happening to a
Process.getInputStream( ).read()
when the process immediately does a START and returns? Why would
the read( ) stay blocked when the START finished launching a new child
process?
... ron cain

Similar Messages

  • Executing a DDL statement from java code

    Hi all,
    this is code from jdev11.1.1.3 version. I am trying to execute a DDL statement in oracle db from java code, but "ORA-00900: invalid SQL statement" error is coming.
    I am trying to create a table in same schema in same db by using 'Copy' command.
    Same DDL command is executing from sql command prompt & table is being created. Plz help me , as how to do from java?
            public String cmb_action() {
            // Add event code here...
            try {
                //getting source db connection
                InitialContext initialContext = new InitialContext();
                DataSource ds = (DataSource) initialContext.lookup("java:comp/env/jdbc/SourceConnDS");
                Connection sourceconn = ds.getConnection();
                sourceconn.setAutoCommit(false);
                String sql = "Copy from myschema/mypass@DB insert t_dept using select * from dept;"                       
                Statement stat = sourceconn.createStatement();
                stat.executeUpdate(sql);
                sourceconn.commit();
                System.out.println("done");
              catch (Exception ne) {
                // TODO: Add catch code
                ne.printStackTrace();
            return null;
        }

    I have a requirement to transfer data from one db to another db from Java Application Layer.Maybe, maye not. We get all sorts of weird "requirements" - which are nothing but thoughts or proposed solutions.
    But,
    Did the "requirement" mention whether the table existed already or not in the target database? - If not, did it tell you to create it - drop/create it?
    Did the "requirement" deliver some explanation to why this copying was neeeded? - Are we talking replication? - Or a one time cloning?
    Etc, etc,
    Personally I would always argue against a "reuirement" like that. - It just isn't the way to do it. Period.
    Regards
    Peter
    P.S: If you are satisfied with what COPY does, then you could let Java make an OS call and do it from there?

  • Accessing XI Tables (ABAP Stack) from Java code

    Hi,
    IS it possible to access tables like SXMSPMAST, SXMSPEMAS directly from Java code without the use of any RFC or BAPI in between?
    Cheers,
    Earlence

    I think it is technically possible, as you can get access to the JDBC Connector service using J2EE's JNDI feature ... Then you can use the internal DB datasource to read data from tables (read ONLY, cuz I'm not sure it is a good idea to update data "outside" the box, and reading can also have potiential perf or stability issue) ... Some (better) methods can also exist !
    Chris
    Edited by: Christophe PFERTZEL on Jan 15, 2010 3:07 PM

  • Executing system commands on Linux

    Hi,
    I am trying to copy a file from Java code on Linux platform using the cp command.
    Process p = Runtime.getRuntime.exec("bash -c \"cp file1 file2\"");
    The process is exiting with exit code 2 and the file is not getting copied.
    The same command when executed directly from the terminal window (command console of Linux) is working fine and the file is getting copied.
    I am using RedHat Linux 7.1. Any ideas plz...
    best wishes
    Issac

    try splitting up the args into an arary
    import java.io.*;
    public class CP {
      public static void main (String [] args) {
        try {
          String [] cmd = {"/bin/sh","-c","cp file1 file2"};
          Process p = Runtime.getRuntime().exec(cmd);
          p.waitFor();
          System.out.println("exit value " + p.exitValue());
        } catch (Exception e) {
          System.out.println("err : " + e);
    }

  • How to execute SAPgui.exe from java code

    Hi All,
    Can any one provide me the exe file name of SAP GUI related.
    I need to call the SAP GUI related exe file from java.
    i tried with a small java prog which executes the exe files.
    it works fine with notepad.exe,javac.exe . But i am unable to execute the SAPgui.exe.
    This is my java code
    try{
         Runtime rt=Runtime.getRuntime();
    //String str= "C:
    WINNT
    system32
    notepad.exe";
    //Process pp=rt.exec("C:
    j2sdk1.4.2_08
    bin
    javac");
    Process pp=rt.exec("C:
    Program Files
    SAP
    FrontEnd
    SAPgui
    SAPgui.exe");
    BufferedReader br=new BufferedReader(new InputStreamReader(pp.getErrorStream()));
                         String line;
                         while ((line = br.readLine()) != null) {
                             System.out.println(line);
              }catch(Exception e){
                   System.out.println(e);
    and may i pass any additional parameters inorder to invoke this exe.
    Please share your ideas abt  this problem.
    Its Urgent PLZ
    Adv Thanks
    Regds
    Phani.

    hi Rajesh,
    here my complete code:
              try{
                   Runtime rt=Runtime.getRuntime();
    //               String str= "C:\Programmi\SAP\FrontEnd\SAPgui\saplogon.exe";
                   String str= "C:\Programmi\SAP\FrontEnd\SAPgui\Sapgui.exe 10.113.10.201 00";
                   //               Process pp=rt.exec("C:\j2sdk1.4.2_08\bin\javac");
                   Process pp=rt.exec(str);
                   BufferedReader br=new BufferedReader(new InputStreamReader(pp.getErrorStream()));
                   String line;
                   while ((line = br.readLine()) != null) {
                   System.out.println(line);
                   }catch(Exception e){
                   System.out.println(e);
    Please note that system number is only two digit and in your case is 00.
    Another important think, i'm using the italian version of windows, so the program directory is c:\programmi, please change into c:\program files, or you can modify your code to be language indipendend using an system environment variable (if exist).
    Hope this help
    Francesco

  • How to kill a system process from java code.

    Hi,
    i need to kill or remove windows system process like cmd.exe from java code.
    like removing it from end process in task mgr.
    i tried below code but its not removed.
    is there a better way we can do this.
    killing a system process from java code will create any issues?
       public static void main(String[] args) throws Exception {
       String[] cmd = { "cmd.exe" };
       Process p = Runtime.getRuntime().exec(cmd);
       p.destroy();
    any suggestions or ideas are really appreciated.
    thanks.

    Hi  jtahlborn, mohan
    yes the process is created from my java code. 
    in my code iam creating a process like below and if it is running for a long i need to kill it from java.
    For that " Runtime.getRuntime().exec("taskkill /F /PID " +  7408); " is working fine.
    7408 is my process id in taskmgr created from java and iam manually passing the PID it to kill it.
    But i need to get the PID from java code.
    Thanks for your suggestions.
    Sample Code:
    public static void main(String args[])
            try {
              Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","start"});        
              Field f = process.getClass().getDeclaredField( "handle");
              f.setAccessible( true);         
              long procHandle = f.getLong( process);
              System.out.println( "prochandle: " + procHandle );
              //Runtime.getRuntime().exec("taskkill /F /PID " +  procHandle);
            } catch( Exception e) {
              e.printStackTrace();

  • Executing jar from java code, then kill parent java code

    Please suggest if there is any best way around on executing jar from java code then killing parent java code.
    a) I have desktop based java application say "Monitor.java" which runs every 5 minutes.
    b) How can I START external java application say "execute.jar" from Monitor.java THEN EXIT Monitor.java
    I tried various options using "ProcessBuilder" and calling bat file but I need Monitor (parent application to EXIT, immediately after calling child (execute.jar)
    Try1) ProcessBuilder builder = new ProcessBuilder("java -jar execute.jar");          
    Process process = builder.start();
    Try2) Runtime r = Runtime.getRuntime();
    Process p = null;
    p = r.exec(new String[] { "cmd", "/c", "start C:/temp/Test.bat" });

    I have a requirement to transfer data from one db to another db from Java Application Layer.Maybe, maye not. We get all sorts of weird "requirements" - which are nothing but thoughts or proposed solutions.
    But,
    Did the "requirement" mention whether the table existed already or not in the target database? - If not, did it tell you to create it - drop/create it?
    Did the "requirement" deliver some explanation to why this copying was neeeded? - Are we talking replication? - Or a one time cloning?
    Etc, etc,
    Personally I would always argue against a "reuirement" like that. - It just isn't the way to do it. Period.
    Regards
    Peter
    P.S: If you are satisfied with what COPY does, then you could let Java make an OS call and do it from there?

  • Problem when connecting locally to Oracle Database 10g from Java code

    Good afternoon,
    I try to connect to my local Oracle 10g from JAVA code. Could somebody tells me what are the 'values' to enter in place of 'value1, value2, value3' in the following:
    final String connectionURLThin = "jdbc:oracle:thin:@value1:value2:value3";
    I tried to put my 'user' and 'pw' credentials I used when connecting with SQL*PLUS:
    value1=my_user_name
    value2=my_pw
    value3=my_schema
    but it doest work. Besides where could have I to put the 'WORKSPACE" name?
    Thanks for any help.
    Claude
    Details:
    ERR MESSAGE----------------------
    Exception in thread "main" java.lang.NoClassDefFoundError: oracle/dms/instrument/ExecutionContextForJDBC
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:365)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:854)
    at java.sql.DriverManager.getConnection(DriverManager.java:620)
    at java.sql.DriverManager.getConnection(DriverManager.java:200)
    at javaapplication6.ConnectionExample.driverManager(ConnectionExample.java:138)
    at javaapplication6.Main.main(Main.java:36)
    Caused by: java.lang.ClassNotFoundException: oracle.dms.instrument.ExecutionContextForJDBC
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
    ... 8 more
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    ---------------------ERR MESSAGE
    JAVA code------------------it compiles but throw an error when running there -> (*)...
    final String driverClass = "oracle.jdbc.driver.OracleDriver";
    final String connectionURLThin = "jdbc:oracle:thin:@jeffreyh3:1521:CUSTDB";
    final String userID = "scott";
    final String userPassword = "tiger";
    final String queryString = "SELECT" +
    " user " +
    " , TO_CHAR(sysdate, 'DD-MON-YYYY HH24:MI:SS') " +
    "FROM dual";
    public void driverManager() {
    Connection con = null;
    Statement stmt = null;
    ResultSet rset = null;
    try {
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    con = DriverManager.getConnection(connectionURLThin, userID, userPassword); // (*) prob here
    stmt = con.createStatement ();
    rset = stmt.executeQuery(queryString);
    rset.close();
    stmt.close();
    } catch (SQLException e) {e.printStackTrace();
    --------------------JAVA JDK 1.6
    My system ------------------------
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
    PL/SQL Release 10.2.0.1.0 - Production
    CORE 10.2.0.1.0 Production
    TNS for Linux: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production

    Yes, the network connection could not be established. Like the error said.
    What you're asking about is the exact reason, but that could be any number of things and not at all related to code. You could have the wrong host, the wrong port. A firewall could be blocking the outgoing connection, a firewall could be blocking the incoming connection. Etc. etc.

  • How to find particular CRM BAPIs from Java code of ISA B2B application?

    Hi Guys,
    I am newbie in CRM ISA field. I am supporting CRM ISA 5.0 B2B application.
    Basically I had a question about how to go about finding the BAPIs which are getting called from the Java side of ISA.
    I know that the framework uses JCO connection in order to execute BAPIs in the back-end and usually these BAPIs are standard.
    So I can put a break-point on the CRM bapis and see which is called when.
    But if I want to track BAPIs from Java code, what should be my approach?
    Please help.
    Thanks!

    Hi,
    To setup the trace logs you need to use the following URL.
    https://<system domain name>:port/<application_name>/admin
    typically it should look like as below:
    https://abc.com:50001/b2b/admin
    Here there is an option to start and stop the logs and after stopping it will generate a Zip file which you need to download and from there you can easily find out the BAPI's or teh RFC calls.
    Also when you search you should alwways keep one thing mind that these FM's normally start with CRM_ISA*
    Hope it helps.
    Regards
    Sidd

  • How to call a .bat file from java code?

    How to call a .bat file from java code? and how can i pass parameters to that .bat file?
    Thanks in advance

    thanks for ur reply
    but still i am getting the same error.
    I am trying to run a .bat file of together tool, my code looks like below
    import java.lang.Runtime;
    import java.lang.Process;
    import java.io.File;
    class SysCall{
         public static void main(String args[]){
              String cmd="D://Borland//Together6.2//bin//Together.bat -script:com.togethersoft.modules.qa.QA -metrics out:D://MySamples//Metrics// -fmt:html D://Borland//Together6.2//samples//java//CashSales//CashSales.tpr";
              //String path="D://Borland//Together6.2//bin//Together.bat ";
              Runtime r= Runtime.getRuntime(); //Declare the system call
              try{
                   System.out.println("Before batch is called");
                   Process p=r.exec(cmd);
                   System.out.println(" Exit value =" + p.exitValue());
                   System.out.println("After batch is called");
              /*can produce errors which must be caught*/
              catch(Exception e) {
                   e.printStackTrace();
                   System.out.println (e.toString());
    I am getting the below exception
    Before batch is called
    java.lang.IllegalThreadStateException: process has not exited
    at java.lang.Win32Process.exitValue(Native Method)
    at SysCall.main(SysCall.java:17)
    java.lang.IllegalThreadStateException: process has not exited

  • Set classpath from java code

    Hi,
    Is it possible to set new classpath from java code? Something like System.setClasspath(String);
    Many thanks
    Miso

    You aren't the first one to wonder whether that would work, so don't call yourself stupid on that account.
    Not taking 15 minutes to set up and run a test to actually see if it works... well, if you really needed the answer, that would be different.

  • Help:create tree node dynamically from java code...

    hi there...can anyone give me solution how to create or add tree node dynamically from java code???
    currently i am using tree node to handle my menu...i try to create tree and add treenode dynamically from .java page, but it failed...can anyone give solution how to create tree ui from java code, so i can create a dynamic menu...thanz before...

    Hi:
    Just put the statements you would normally put on a sqlplus command line in jdbc statements and execute them?
    http://www-db.stanford.edu/~ullman/fcdb/oracle/or-jdbc.html#0.1_executeUpdate
    MJG

  • Invoking Microsoft Word from Java code

    I want to invoke Microsoft word from Java code. How can i do this plz ............... Help

    do something along these lines.... here is an example with notepad
    create a .bat file with the commmand in to run notepad for example
    notpad c:\test.txtthis command calls notepad and passes it the argument C:\test.txt which is the file and it's location, that I want to open.
    The Java program
    import java.util.*;
    import java.io.*;
    public class Run
    public static void main(String args[])
        try
           //the name of the batch file with your commands in
           String command ="runprog.bat";
           //get the runtime 
           Runtime rt  = Runtime.getRuntime();
           //run the bat file  
           Process proc = rt.exec(command);
          //wait for the program to exit i.e notepad then get the return code
          int exitVal = proc.waitFor();
          //print out the exit value
          System.out.println(2THe Process exit value is: " + exitVal);
      catch(Throwable t)
         t.printStackTrace();
    }have a look at this
    http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html
    and this
    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps_p.html

  • Ttrigger Event Sub-Process from Java code.

    Hi All,
    Is there any way to trigger Event Sub-Process from Java code.
    My requirement is to trigger an Event SubProcess when a Approver clicks on REJECT button in HUMAN TASK.
    One way of achieving this is by placing a gateway after the human task and by validating the human task outcome and there by triggering a call to Event SubProcess.
    But we dont want to put a gateway after the human task. But instead we would like to trigger the Event SubProcess from the ADF task forms itself. ie, by calling a JavaCode.
    Please give me some pointers on achieving this task.
    Thanks
    Parker.

    Hi  jtahlborn, mohan
    yes the process is created from my java code. 
    in my code iam creating a process like below and if it is running for a long i need to kill it from java.
    For that " Runtime.getRuntime().exec("taskkill /F /PID " +  7408); " is working fine.
    7408 is my process id in taskmgr created from java and iam manually passing the PID it to kill it.
    But i need to get the PID from java code.
    Thanks for your suggestions.
    Sample Code:
    public static void main(String args[])
            try {
              Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","start"});        
              Field f = process.getClass().getDeclaredField( "handle");
              f.setAccessible( true);         
              long procHandle = f.getLong( process);
              System.out.println( "prochandle: " + procHandle );
              //Runtime.getRuntime().exec("taskkill /F /PID " +  procHandle);
            } catch( Exception e) {
              e.printStackTrace();

  • Starting exetutable java file from java code

    Hi I was wondering how I can start a executable java file from java code?
    thanks

    Hi Mkaveli,
    Yes, it's possible. If you have a JAR executable, you've just to call the main method of its starter class. For a simple executable class, just call its main method.
    This way :
    SomeStarter.main(null); // if there's no argumentSmall precision : the executable JAR or class must be specified in the classpath of your application.

Maybe you are looking for

  • Bursting Java API throws an error javax.mail.internet.ParseException

    Hi, I am using the BurstingProcessorEngine API call send emails to the employees of an organization. When i used the bursting file with the paramter of attachments to false, the email goes through. When i change the attachment parameter to yes in the

  • Having to 'Save As' every open pdf

    I am using Acrobat X Pro.. with Pitstop Pro 08.. Everytime I make a change in a PDF using pitstop I cannot just save my document. I need to 'save as' a new doc. I have tried searching settings etc and have nearly given up. Does anyone know what the p

  • Using ssh as an http proxy on Arch [SOLVED]

    I read this article and would like to use a friend's debian box as a www proxy.  I ssh'ed into it using the following command from my Arch box: $ ssh user@ip -D 8000 As I understand it, his box is now acting as a SOCKS-type (pseudo)server.  I configu

  • Restrict for movement type 201 by material typeu200F

    Dear Gurus, Can SAP restrict movement type 201 by material type? For example, Can i set authorization for 201 movement type to only material type UNBW material?

  • How to consume json webservice in abap?

    hello  every one please help me how to consume json format webservice in abap. i am new in abap please help me out . Thanks&Regards ~Ahmad