public static void unregisterSigListener(String sigName, SigListener sigListener){ if (StringUtils.isEmpty(sigName)) { throw new IllegalArgumentException("NULL signal name"); } if (sigListener == null) { throw new IllegalArgumentException("NULL signal listener"); } if (!sigHandlerMap.containsKey(sigName)){ sigHandlerMap.get(sigName).removeListener(sigListener); } } }
/** * Adds a signal listener for a specific signal. * * Multiple listeners per specific signal are supported but execution order is indeterminate. * * @NotNull sigName * @NotNull sigListener * @param sigName signal name, as in UNIX "kill" command, e.g. INT, USR1, etc, without "SIG" prefix * @param sigListener signal notification callback object * @throws IllegalArgumentException if invalid signal name or a signal is already handled by OS or JVM */ public static void registerSigListener(String sigName, SigListener sigListener) { if (StringUtils.isEmpty(sigName)) { throw new IllegalArgumentException("NULL signal name"); } if (sigListener == null) { throw new IllegalArgumentException("NULL signal listener"); } if (!sigHandlerMap.containsKey(sigName)){ sigHandlerMap.put(sigName, new SigHandler()); } SigHandler sigHandler = sigHandlerMap.get(sigName); sigHandler.addListener(sigListener); Signal.handle(new Signal(sigName), sigHandler); LOGGER.info("Signal Listener registered for signal " + sigName); }