# Tetsy Daemonize ![Crates.io](https://img.shields.io/crates/d/daemonize-rs.svg) [![Released API docs](https://docs.rs/daemonize-rs/badge.svg)](https://docs.rs/daemonize-rs) [![Build Status][travis-image]][travis-url] [![Build Status][appveyor-image]][appveyor-url] [travis-image]: https://travis-ci.org/tetcoin/tetsy-daemonize.svg?branch=master [travis-url]: https://travis-ci.org/tetcoin/tetsy-daemonize [appveyor-image]: https://ci.appveyor.com/api/projects/status/github/tetcoin/tetsy-daemonize?svg=true [appveyor-url]: https://ci.appveyor.com/project/tetcoin/tetsy-daemonize ## Example ```rust extern crate tetsy_daemonize; use tetsy_daemonize::daemonize; use std::{thread, time, process, io}; use io::Write; fn main() { match daemonize("pid_file.txt") { // we are now in the daemon, use this handle to detach from the parent process Ok(handle) => { let mut count = 0; loop { // the daemon's output is piped to the parent process' stdout println!("Count: {}", count); if count == 5 { handle.detach_with_msg("count has reached 5, continuing in background"); } thread::sleep(time::Duration::from_secs(1)); count += 1; } } // the daemon or the parent process may receive this error, // just print it and exit Err(e) => { // if this is the daemon, this is piped to the parent's stderr eprintln!("{}", e); // don't forget to flush io::stderr().flush(); process::exit(1); } } } ``` ## License This crate is distributed under the terms of GNU GENERAL PUBLIC LICENSE version 3.0. See [LICENSE](LICENSE) for details.