From 48938fa3fd32e0822df94b1fd19277c3c7bf47b2 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 10 Nov 2016 20:09:15 -0700 Subject: [PATCH] Use clone instead of threading to daemonize --- src/bin/getty.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/bin/getty.rs b/src/bin/getty.rs index 486154c4b3..9e73f61de1 100644 --- a/src/bin/getty.rs +++ b/src/bin/getty.rs @@ -1,8 +1,7 @@ extern crate syscall; -use std::io::Write; use std::process::Command; -use std::{env, io, str, thread}; +use std::{env, str}; pub fn main() { let mut args = env::args().skip(1); @@ -29,12 +28,10 @@ pub fn main() { } } - thread::spawn(move || { - let stdout = io::stdout(); - let mut stdout = stdout.lock(); + if unsafe { syscall::clone(0).unwrap() } == 0 { loop { - stdout.write(b"\x1Bc").unwrap(); - let _ = stdout.flush(); + syscall::write(1, b"\x1Bc").unwrap(); + syscall::fsync(1).unwrap(); match Command::new("login").spawn() { Ok(mut child) => match child.wait() { Ok(_status) => (), //println!("getty: waited for login: {:?}", status.code()), @@ -43,5 +40,5 @@ pub fn main() { Err(err) => panic!("getty: failed to execute login: {}", err) } } - }); + } }