Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: how can i know from the java code that an applescript completed to run? - urgent



Thanks Greg.

Very interesting.
Indeed, 16384/16385 is the boundary on my MacBook 10.4.10 as well.

So it appears to me that if Java process spawns a child process (another java or non-java app) with Runtime.getRuntime().exec(), IPC is automatically established by stdin/out/err.
Is this true?


YY


On 19-Oct-07, at 11:23 AM, Greg Guerin wrote:

Doug Zwick wrote:

The IPC buffers used by the streams are quite small (IIRC they are on the
order of 256 bytes).

A few months ago, I had a need to know exactly how big the pipe buffers
were, so I write a Java program to help me find out. Across several machines
running 10.4, the buffer is 16KB in length, which is larger than I expected.


However, this could vary for any number of reasons, and is not guaranteed
by any parameter or configurable value in the OS I could find. My guess is
it's wired into a kernel header file somewhere, but that's just a guess.


Below is the test program I wrote. It's an informative exercise to
intentionally try to deadlock a parent process. I recommend it highly.


This one deadlocks at 16385 or above, but ends normally at 16384 or below,
at least for me. YMMV.


  -- GG


// Released into the public domain. No warranties. Use as you will.

public class Pipelen
{
/**
** Static entry point of application.
** First arg is a number: a byte-count to test.
** If this app deadlocks, the buffer is less than that number.
** If this app exits normally, the buffer is equal to or more than that number.
** You can use binary search to rapidly narrow down the exact size.
**<p>
** To terminate a deadlocked app, press command-dot (keyboard interrupt).
**<p>
** Property "write" is a boolean, "count" is a number:
** true to perform child task: write count N's to stdout.
** In the absence of "write", spawns child by exec(), then awaits child's exit.
*/
public static void
main( String[] args )
{
try
{
Pipelen task = new Pipelen( args[ 0 ] );
task.task();
}
catch ( Exception caught )
{ caught.printStackTrace(); }
}



private String count;

  /** Create */
  public
  Pipelen( String str )
  {  count = str;  }


/** Choose task from "write" property. */ public void task() throws Exception { if ( Boolean.getBoolean( "write" ) ) write(); else spawn(); }

  /** Spawn child Process and waitFor() it. */
  private void
  spawn()
    throws Exception
  {
    // Pass along classpath.
    String classpath = System.getProperty( "java.class.path" );

    String[] cmd = new String[]
      {
        "java",  "-cp",  classpath,
         "-Dwrite=true",  "-Dcount=" + count,
        this.getClass().getName(),  count
      };

    Process child = Runtime.getRuntime().exec( cmd );

// Close child's stdin immediately, which gives it an EOF on its input.
// This will terminate any child that's waiting for input.
child.getOutputStream().close();


    System.out.println( "Waiting for child..." );
    child.waitFor();
  }

  /** Write and flush bytes to System.out, "count" sys prop. */
  private void
  write()
    throws Exception
  {
    PrintStream out = System.out;  // System.out or System.err

int count = Integer.getInteger( "count", 1 ).intValue();
for ( int i = 0; i < count; ++i )
{ out.print( Character.forDigit( count & 7, 10 ) ); out.flush (); }
}


}


_______________________________________________ Do not post admin requests to the list. They will be ignored. Java-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/java-dev/email@hidden

This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Java-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/java-dev/email@hidden

This email sent to email@hidden
References: 
 >Re: how can i know from the java code that an applescript completed to run? - urgent (From: Greg Guerin <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.