diff --git a/docs/running.rst b/docs/running.rst index 4dda8e353..5e2fef833 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -318,9 +318,21 @@ restart all Restart all processes Note: restart does not reread config files. For that, see reread and update. -signal +signal - No help on signal + Signal a process + +signal :\* + + Signal all processes in a group + +signal + + Signal multiple processes or groups + +signal all + + Signal all processes start diff --git a/supervisor/datatypes.py b/supervisor/datatypes.py index 7fa0dc2fe..8679959bc 100644 --- a/supervisor/datatypes.py +++ b/supervisor/datatypes.py @@ -404,6 +404,8 @@ def url(value): # all valid signal numbers SIGNUMS = [ getattr(signal, k) for k in dir(signal) if k.startswith('SIG') ] +if hasattr(signal, 'SIGRTMIN') and hasattr(signal, 'SIGRTMAX'): + SIGNUMS.extend(range(signal.SIGRTMIN, signal.SIGRTMAX + 1)) def signal_number(value): try: diff --git a/supervisor/tests/test_datatypes.py b/supervisor/tests/test_datatypes.py index b7f092f7c..ae34108dd 100644 --- a/supervisor/tests/test_datatypes.py +++ b/supervisor/tests/test_datatypes.py @@ -750,6 +750,18 @@ def test_raises_for_bad_name(self): expected = "value 'BADSIG' is not a valid signal name" self.assertEqual(e.args[0], expected) + @unittest.skipUnless( + hasattr(signal, 'SIGRTMIN'), 'real-time signals not available' + ) + def test_accepts_realtime_signal_number(self): + self.assertEqual(self._callFUT(signal.SIGRTMIN), signal.SIGRTMIN) + + @unittest.skipUnless( + hasattr(signal, 'SIGRTMAX'), 'real-time signals not available' + ) + def test_accepts_realtime_signal_max(self): + self.assertEqual(self._callFUT(signal.SIGRTMAX), signal.SIGRTMAX) + class AutoRestartTests(unittest.TestCase): def _callFUT(self, arg): return datatypes.auto_restart(arg)