use daemon() when the C library provides it
For systems that cannot support fork() (like no-mmu Linux), use daemon() if it is available for the daemonizing code. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
		 Mike Frysinger
					Mike Frysinger
				
			
				
					committed by
					
						 Max Kellermann
						Max Kellermann
					
				
			
			
				
	
			
			
			 Max Kellermann
						Max Kellermann
					
				
			
						parent
						
							c3e02bec3b
						
					
				
				
					commit
					499ed62dd7
				
			
							
								
								
									
										24
									
								
								src/daemon.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/daemon.c
									
									
									
									
									
								
							| @@ -17,6 +17,7 @@ | ||||
|  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
| #include "daemon.h" | ||||
|  | ||||
| #include <glib.h> | ||||
| @@ -128,21 +129,28 @@ daemonize_set_user(void) | ||||
| static void | ||||
| daemonize_detach(void) | ||||
| { | ||||
| 	pid_t pid; | ||||
|  | ||||
| 	/* flush all file handles before duplicating the buffers */ | ||||
|  | ||||
| 	fflush(NULL); | ||||
|  | ||||
| #ifdef HAVE_DAEMON | ||||
|  | ||||
| 	if (daemon(0, 1)) | ||||
| 		g_error("daemon() failed: %s", g_strerror(errno)); | ||||
|  | ||||
| #elif defined(HAVE_FORK) | ||||
|  | ||||
| 	/* detach from parent process */ | ||||
|  | ||||
| 	pid = fork(); | ||||
| 	if (pid < 0) | ||||
| 	switch (fork()) { | ||||
| 	case -1: | ||||
| 		g_error("fork() failed: %s", g_strerror(errno)); | ||||
|  | ||||
| 	if (pid > 0) | ||||
| 	case 0: | ||||
| 		break; | ||||
| 	default: | ||||
| 		/* exit the parent process */ | ||||
| 		_exit(EXIT_SUCCESS); | ||||
| 	} | ||||
|  | ||||
| 	/* release the current working directory */ | ||||
|  | ||||
| @@ -153,6 +161,10 @@ daemonize_detach(void) | ||||
|  | ||||
| 	setsid(); | ||||
|  | ||||
| #else | ||||
| 	g_error("no support for daemonizing"); | ||||
| #endif | ||||
|  | ||||
| 	g_debug("daemonized!"); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user