docs: function forkExecWait(args, callback)
  {
  	var cmd, cmdstr, cmdargs, options;
  	var passthru, rv;
  
  	mod_assertplus.object(args, 'args');
  	mod_assertplus.arrayOfString(args.argv, 'args.argv');
  	mod_assertplus.optionalString(args.cwd, 'args.cwd');
  	mod_assertplus.optionalObject(args.env, 'args.env');
  	mod_assertplus.optionalNumber(args.timeout, 'args.timeout');
  	mod_assertplus.optionalNumber(args.maxBuffer, 'args.maxBuffer');
  	mod_assertplus.optionalNumber(args.uid, 'args.uid');
  	mod_assertplus.optionalNumber(args.gid, 'args.gid');
  	mod_assertplus.optionalBool(args.includeStderr, 'args.stderr');
  
  	cmd = args.argv[0];
  	cmdstr = JSON.stringify(args.argv.join(' '));
  	cmdargs = args.argv.slice(1);
  	options = {};
  	passthru = [ 'cwd', 'encoding', 'env', 'maxBuffer', 'uid', 'gid',
  	    'timeout' ];
  	passthru.forEach(function (field) {
  		if (args.hasOwnProperty(field))
  			options[field] = args[field];
  	});
  
  	if (options.hasOwnProperty('timeout'))
  		options['killSignal'] = 'SIGKILL';
  
  	/*
  	 * Node returns most operational errors asynchronously here, but some
  	 * are synchronous (like EACCES from exec(2)).  We want to make these
  	 * asynchronous here.
  	 */
  	try {
  		rv = mod_child.execFile(cmd, cmdargs, options,
  		    function (error, stdout, stderr) {
  			onChildExited(cmdstr, callback, error, stdout, stderr,
  			    args.includeStderr);
  		    });
  	} catch (ex) {
  		rv = null;
  		setImmediate(onChildExited, cmdstr, callback, ex, '', '',
  		    args.includeStderr);
  	}
  
  	return (rv);
  }