docs: function interpretChildProcessResult(args)
  {
  	var info, err;
  	var error;
  
  	mod_assertplus.object(args, 'args');
  	mod_assertplus.string(args.label, 'args.label');
  	mod_assertplus.optionalString(args._extra, 'args._extra');
  
  	error = args.error;
  	info = {
  	    'error': null,
  	    'status': null,
  	    'signal': null
  	};
  
  	if (error === null) {
  		info.status = 0;
  		return (info);
  	}
  
  	/*
  	 * child_process.execFile() is documented to produce either null
  	 * or an instance of Error.
  	 */
  	mod_assertplus.ok(error instanceof Error,
  	    'child_process function returned non-null, non-Error');
  	if (error.signal) {
  		/*
  		 * We deliberately don't pass "error" to the VError
  		 * constructor because the "message" on Node's error is
  		 * non-idiomatic for Unix programs.
  		 */
  		err = new VError('unexpectedly terminated by signal %s',
  		    error.signal);
  		info.signal = error.signal;
  	} else if (typeof (error.code) == 'number') {
  		/* See above. */
  		if (args._extra) {
  			err = new VError('exited with status %d: %s',
  			    error.code, args._extra);
  		} else {
  			err = new VError('exited with status %d', error.code);
  		}
  		info.status = error.code;
  	} else {
  		/*
  		 * In this case, fork() or exec() probably failed.
  		 * Neither "signal" nor "status" will be provided to the
  		 * caller since no child process was created.  In this
  		 * case, we use the underlying error as a cause because
  		 * it may well be meaningful.
  		 *
  		 * Note that this kind of error can have a "code" on it,
  		 * but it's not the status code of the program.  Node
  		 * uses "code" on other kinds of errors.  That's why the
  		 * previous condition checks whether "code" is a number,
  		 * not just whether it's present.
  		 */
  		err = error;
  	}
  
  	mod_assertplus.ok(err instanceof Error);
  	info.error = new VError(err, 'exec %s', args.label);
  	return (info);
  }