From 1769bb2936665b2af5e19dc2837464167396c34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=8E=E5=A4=A9=E6=9C=89=E9=A3=8E=E5=90=B9?= Date: Tue, 16 May 2023 13:01:46 +0000 Subject: [PATCH 1/2] get the exit code of the child process --- daemonize/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/daemonize/src/lib.rs b/daemonize/src/lib.rs index 5b7eb93e..3e9c5de7 100644 --- a/daemonize/src/lib.rs +++ b/daemonize/src/lib.rs @@ -441,9 +441,9 @@ unsafe fn perform_fork() -> Result, ErrorKind> { } unsafe fn waitpid(pid: libc::pid_t) -> Result { - let mut child_ret = 0; - check_err(libc::waitpid(pid, &mut child_ret, 0), ErrorKind::Wait)?; - Ok(child_ret) + let mut child_stat = 0; + check_err(libc::waitpid(pid, &mut child_stat, 0), ErrorKind::Wait)?; + Ok(libc::WEXITSTATUS(child_stat)) } unsafe fn set_sid() -> Result<(), ErrorKind> { From e1d6dd6bc095e096fd207f35b2f51d08342a71f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=8E=E5=A4=A9=E6=9C=89=E9=A3=8E=E5=90=B9?= Date: Tue, 16 May 2023 13:03:23 +0000 Subject: [PATCH 2/2] check the pid file before fork() --- daemonize/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/daemonize/src/lib.rs b/daemonize/src/lib.rs index 3e9c5de7..22ff3f81 100644 --- a/daemonize/src/lib.rs +++ b/daemonize/src/lib.rs @@ -374,16 +374,16 @@ impl Daemonize { set_sid()?; libc::umask(self.umask.inner); - if perform_fork()?.is_some() { - exit(0) - }; - let pid_file_fd = self .pid_file .clone() .map(|pid_file| create_pid_file(pid_file)) .transpose()?; + if perform_fork()?.is_some() { + exit(0) + }; + redirect_standard_streams(self.stdin, self.stdout, self.stderr)?; let uid = self.user.map(|user| get_user(user)).transpose()?;