diff options
author | Christian Duerr <chrisduerr@users.noreply.github.com> | 2019-03-21 19:55:19 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-21 19:55:19 +0000 |
commit | 32cb48774ad139c7f4fe9864e28fefeaa1009c79 (patch) | |
tree | a70f4f02ff48e90b12125bdec7d854e46d27b8c8 | |
parent | c6ab2a8867ad0d064d67dc5e32138cbb3d3ab833 (diff) | |
download | alacritty-32cb48774ad139c7f4fe9864e28fefeaa1009c79.tar.gz alacritty-32cb48774ad139c7f4fe9864e28fefeaa1009c79.zip |
Remove deprecated libc::daemon call
Since version 10.5 of macOS the libc::daemon call has been deprecated.
While it is recommended by macOS to use launchd instead, this is not
easily available on other unix platforms.
However since we just spawn a daemon process to prevent Alacritty from
spawning zombies, we can manually invoke `fork` in the child process to
cause a double-fork and re-parent the child process under init so it can
be reaped automatically.
Since the daemon call is not part of POSIX, using the double fork on all
unix platforms also has some portability advantages.
-rw-r--r-- | src/util.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/util.rs b/src/util.rs index b7a05041..4532d2e4 100644 --- a/src/util.rs +++ b/src/util.rs @@ -15,6 +15,7 @@ use std::{cmp, io}; use std::ffi::OsStr; use std::process::Command; +use std::process::Stdio; #[cfg(not(windows))] use std::os::unix::process::CommandExt; @@ -22,8 +23,6 @@ use std::os::unix::process::CommandExt; #[cfg(windows)] use std::os::windows::process::CommandExt; #[cfg(windows)] -use std::process::Stdio; -#[cfg(windows)] use winapi::um::winbase::{CREATE_NEW_PROCESS_GROUP, CREATE_NO_WINDOW}; /// Threading utilities @@ -94,8 +93,13 @@ pub fn start_daemon<I, S>(program: &str, args: I) -> io::Result<()> { Command::new(program) .args(args) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) .before_exec(|| unsafe { - ::libc::daemon(1, 0); + if ::libc::fork() != 0 { + std::process::exit(0); + } Ok(()) }) .spawn()? |