Launchd to terminate what it starts
I would look into the ExitTimeOut value for launchd.plist:


  TimeOut 
  
  The recommended idle time out (in seconds) to pass to the job. If no value is specified, a default time out will be supplied by launchd for use by the job at check in time.
  
  ExitTimeOut 
  
  The amount of time launchd waits before sending a SIGKILL signal. The default value is 20 seconds. The value zero is interpreted as infinity.