[X2Go-Commits] [x2goclient] 02/257: unixhelper.{cpp, h}: implement cleanup program for process group.

git-admin at x2go.org git-admin at x2go.org
Mon Nov 28 16:04:50 CET 2016


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch bugfix/osx
in repository x2goclient.

commit ca9419d32029c74da8332c45dfcc1db15b6c1a17
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Sat Mar 14 23:57:49 2015 +0100

    unixhelper.{cpp,h}: implement cleanup program for process group.
---
 debian/changelog   |    1 +
 src/unixhelper.cpp |   38 ++++++++++++++++++++++++++++++++++++++
 src/unixhelper.h   |    9 +++++++++
 3 files changed, 48 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 9c77213..dff3ae8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -12,6 +12,7 @@ x2goclient (4.0.5.3-0x2go1) UNRELEASED; urgency=medium
     - src/sshmasterconnection.cpp: add SecurID prompt to challenge auth code
       prompts.
     - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub.
+    - unixhelper.{cpp,h}: implement cleanup program for process group.
 
   [ Bernard Cafarelli ]
   * New upstream version (4.0.5.3):
diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp
index 221bdb2..545c2c1 100644
--- a/src/unixhelper.cpp
+++ b/src/unixhelper.cpp
@@ -19,5 +19,43 @@
 
 #ifdef Q_OS_UNIX
 
+#include <csignal>
+#include <unistd.h>
+#include <iostream>
+#include <cstring>
+#include <cerrno>
+#include <cstdlib>
+
+#include "unixhelper.h"
+
+void unixhelper::kill_pgroup (int signal) {
+  if (SIGHUP == signal) {
+    /* Try to kill via SIGTERM first. */
+    if (0 != killpg (getpgrp (), SIGTERM)) {
+      std::cerr << "WARNING: unable to send SIGTERM to process group: " << std::strerror (errno) << std::endl;
+    }
+
+    /* Grant a grace period of (at least) 5 seconds. */
+    sleep (5);
+
+    /* Don't handle any errors here, because we die anyway. */
+    killpg (getpgrp (), SIGKILL);
+  }
+}
+
+
+int unixhelper::unix_cleanup () {
+  if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) {
+    std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl;
+    std::exit (1);
+  }
+
+  std::signal (SIGHUP, kill_pgroup);
+
+  /* Sleep forever... at least one second in each run. */
+  for (;;) {
+    sleep (1);
+  }
+}
 
 #endif /* defined (Q_OS_UNIX) */
diff --git a/src/unixhelper.h b/src/unixhelper.h
index 31d983e..fab611e 100644
--- a/src/unixhelper.h
+++ b/src/unixhelper.h
@@ -22,7 +22,16 @@
 #ifndef UNIXHELPER_H
 #define UNIXHELPER_H
 
+class unixhelper {
+  public:
+    unixhelper () {}
+    ~unixhelper () {}
+    unix_cleanup ();
 
+  private:
+    unixhelper (const unixhelper &other);
+    void kill_pgroup (int signal);
+};
 
 #endif /* !defined (UNIXHELPER_H) */
 

--
Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git


More information about the x2go-commits mailing list