/* # Copyright (c) 2009 - OpenSLX Project, Computer Center University of Freiburg # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING # # If you have any feedback please consult http://openslx.org/feedback and # send your suggestions, praise, or complaints to feedback@openslx.org # # General information about OpenSLX can be found at http://openslx.org/ # -------------------------------------------------------------------------- # pvsPrivInputSignalHandler.h: # - Handle signals forwarded over a file descriptor - interface # -------------------------------------------------------------------------- */ #ifndef PVSPRIVINPUTSIGNALHANDLER_H_ #define PVSPRIVINPUTSIGNALHANDLER_H_ #include /** * Handle signals. * * This class reads \c int values from a file descriptor and dispatches sends * Qt signals according to the \c SIG... value the integer represents. * The purpose of this mechanism is to integrate (asynchronous) Unix signal * handling into the synchronous event-driven Qt main loop. The main() function * is expected to open a socket pair and install handlers for all relevant signals * that simply write the number of the signal to that pipe. * * If allowUnauthenticatedKilling() has not been called, this class only accepts * signal numbers that are sent by the same process. */ class PVSPrivInputSignalHandler : public QObject { Q_OBJECT public: PVSPrivInputSignalHandler(QObject* parent = 0) : QObject(parent) { } /** If \c value is \c true, allow sending signal numbers from other processes. */ void allowUnauthenticatedKilling(bool value) { _allowUnauthenticatedKilling = value; } public slots: /** Connect this slot to a \c QSocketNotifier's \c activated(int) signal. */ void signalReceived(int sigfd); signals: /** SIGTERM */ void terminate(); /** SIGHUP */ void reloadConfiguration(); private: bool _allowUnauthenticatedKilling; }; #endif /* PVSPRIVINPUTSIGNALHANDLER_H_ */