/**
* This is truly where the magic happens. This is where we fork the process and kill the parent
* process, which is essentially what turns the application into a daemon.
*
* @return void
*
* @since 3.0.0
* @throws \RuntimeException
*/
protected function detach()
{
Log::add('Detaching the ' . $this->name . ' daemon.', Log::DEBUG);
// Attempt to fork the process.
$pid = $this->fork();
// If the pid is positive then we successfully forked, and can close this application.
if ($pid) {
// Add the log entry for debugging purposes and exit gracefully.
Log::add('Ending ' . $this->name . ' parent process', Log::DEBUG);
$this->close();
} else {
// Setup some protected values.
$this->exiting = false;
$this->running = true;
// Set the parent to self.
$this->parentId = $this->processId;
}
}