message: Moe exit message
diff: @@ -15,8 +15,7 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  use tokio_signal::unix::Signal;
  // Monitor SIGCHLD, triggered if subprocess (plugin) is exited.
  - let fut1 = Signal::new(libc::SIGCHLD, handle)
  - .and_then(|signal| {
  + let fut1 = Signal::new(libc::SIGCHLD, handle).and_then(|signal| {
  signal.take(1)
  .for_each(|_| -> Result<(), io::Error> {
  error!("Plugin exited unexpectly (SIGCHLD)");
  @@ -29,8 +28,7 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  });
  // Monitor SIGTERM, triggered if shadowsocks is exited gracefully. (Kill by user).
  - let fut2 = Signal::new(libc::SIGTERM, handle)
  - .and_then(|sigterm| {
  + let fut2 = Signal::new(libc::SIGTERM, handle).and_then(|sigterm| {
  sigterm.take(1)
  .for_each(|_| -> Result<(), io::Error> {
  info!("Received SIGTERM, exiting.");
  @@ -43,8 +41,7 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  });
  // Monitor SIGINT, triggered by CTRL-C
  - let fut3 = Signal::new(libc::SIGINT, handle)
  - .and_then(|sigint| {
  + let fut3 = Signal::new(libc::SIGINT, handle).and_then(|sigint| {
  sigint.take(1)
  .for_each(|_| -> Result<(), io::Error> {
  info!("Received SIGINT, exiting.");
  @@ -65,7 +62,7 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  .map_err(|(e, _)| e)
  .then(|r| {
  // Something happened ... killing all subprocesses
  - info!("Killing {} plugins and then exit", plugins.len());
  + info!("Killing {} plugin(s) and then ... Bye Bye :)", plugins.len());
  drop(plugins);
  match r {
  @@ -85,8 +82,7 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  use tokio_signal::windows::Event;
  - let fut1 = Event::ctrl_c(handle)
  - .and_then(|ev| {
  + let fut1 = Event::ctrl_c(handle).and_then(|ev| {
  ev.take(1).for_each(|_| -> Result<(), io::Error> {
  error!("Received Ctrl-C event");
  Ok(())
  @@ -96,8 +92,7 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  error!("Failed to monitor Ctrl-C event: {:?}", err);
  });
  - let fut2 = Event::ctrl_break(handle)
  - .and_then(|ev| {
  + let fut2 = Event::ctrl_break(handle).and_then(|ev| {
  ev.take(1).for_each(|_| -> Result<(), io::Error> {
  error!("Received Ctrl-Break event");
  Ok(())
  @@ -109,7 +104,7 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  let fut = fut1.select(fut2).then(|_| -> Result<(), ()> {
  // Something happened ... killing all subprocesses
  - info!("Killing {} plugins and then exit", plugins.len());
  + info!("Killing {} plugin(s) and then ... Bye Bye :)", plugins.len());
  drop(plugins);
  process::exit(libc::EXIT_FAILURE);
  });
  @@ -120,6 +115,8 @@ pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  pub fn monitor_signal(handle: &Handle, plugins: Vec<Plugin>) {
  // FIXME: What can I do ...
  // Blocks forever
  - let fut = futures::empty::<(), ()>().and_then(|_| { drop(plugins); });
  + let fut = futures::empty::<(), ()>().and_then(|_| {
  + drop(plugins);
  + });
  handle.spawn(fut);
  }
  