В 12:39 -0500 на 02.02.2010 (вт), Ian D. Leroux написа:
> To check that I'm doing this right, here are the relevant lines I see
> in
> $ ps ax
> in each of the two cases
> 
> 28485 ?        S<     0:00 /usr/bin/gdnc --daemon
> 
> 28729 pts/2    S<     0:00 /usr/bin/gdnc --daemon

Just to be sure, could you run a crashing app in gdb, and when it stops
on SIGABRT, check how many gdnc instances are running?

> I await the test program with interest. 

Let's try something very simple first.  Install libgnustep-base-dev and
compile he attached program with "gs_make".  Then run ./obj/nctest.
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = nctest
nctest_OBJC_FILES = nctest.m
include $(GNUSTEP_MAKEFILES)/tool.make
#import	<Foundation/Foundation.h>

int
main (int argc, char** argv, char **env)
{
  NSAutoreleasePool *pool = [NSAutoreleasePool new];
  NSProcessInfo	    *proc = [NSProcessInfo processInfo];
  NSBundle        *bundle = [NSBundle mainBundle];
  NSArray	    *args;
  unsigned		i;
  int              retval = 0;

  [NSProcessInfo initializeWithArguments:argv
		 count:argc
		 environment:env];

  args = [proc arguments];
  GSPrintf (stderr, @"Useless info about bundle: %...@\n", bundle);

  if ([args count] <= 1)
    {
      GSPrintf (stderr, @"Please specify some arguments.\n");
      RELEASE (pool);
      exit (EXIT_FAILURE);
    }
  else if ([[proc environment] valueForKey:@"NOHANDLE"] != nil)
    GSPrintf (stderr, @"NOHANDLE defined; should exit with success.\n");
  else
    {
      for (i = 1; i < [args count]; i++)
	{
	  NSString	*opt = [args objectAtIndex: i];

 	  NS_DURING
	    {
	      NSString	*tempString;
	      id	result;

	      tempString = [NSString stringWithString: opt];
	      if (tempString == nil)
		GSPrintf (stderr, @"This should not happen.\n");
	      /* Exception handler taking care here.  */
	      else if (![tempString propertyList]); 
	      else if ((result = [tempString propertyList]) == nil)
	       	GSPrintf (stderr, @"'%@' - a nil property list.\n", opt);
	      else if ([result isKindOfClass: [NSDictionary class]] == YES)
		GSPrintf (stderr, @"'%@' - a dictionary.\n", opt);
	      else if ([result isKindOfClass: [NSArray class]] == YES)
		GSPrintf (stderr, @"'%@' - an array.\n", opt);
	      else if ([result isKindOfClass: [NSString class]] == YES)
		GSPrintf (stderr, @"'%@' - a string.\n", opt);
	      else
		GSPrintf (stderr, @"'%@' - unknown class %...@.\n",
		  opt, [[result class] description]);
	    }
	  NS_HANDLER
	    {
	      GSPrintf (stderr, @"'%@' failed with:\...@.\n", opt,
		[localException reason]);
	      GSPrintf (stderr, @"Failure.\n");
	      retval = 1;
	    }
	  NS_ENDHANDLER
	}
    }
  RELEASE (pool);
  return retval;
}

Reply via email to