Linux поддерживает отправку произвольного Posix-сигнала, такого как SIGINT или SIGTERM, в процесс с помощью kill -Command. В то время как SIGINT и SIGTERM являются просто скучными старыми способами прекращения процесса в дружественном или не-дружественном виде, SIGQUIT предназначен для запуска дампа ядра. Это можно использовать для запуска запущенной виртуальной машины Java для печати дампа потока, включая стек стеков всех работающих потоков - аккуратно! После печати информации об отладке Java VM продолжит делать то, что было раньше; на самом деле свалка потока происходит только в другом порожденном потоке с максимальным приоритетом. (Вы можете попробовать это самостоятельно, используя kill -3 <VM-PID>.)
Обратите внимание, что вы также можете регистрировать свои собственные обработчики сигналов с помощью классов (неподдерживаемых!) Signal и SignalHandler в sun.misc -пакете, поэтому вы можете иметь с ним всевозможные удовольствия.
Однако мне еще предстоит найти способ отправки сигнала в процесс Windows. Сигналы создаются с помощью определенных пользовательских входов: Ctrl-C запускает a SIGINT на обеих платформах, например. Но, похоже, нет никакой утилиты для ручного отправки сигнала на запущенный, но неинтерактивный процесс в Windows. Очевидным решением является использование исполняемого файла Cygwin kill, но, хотя он может завершать процессы Windows с использованием соответствующего Windows API, я не мог отправить с ним SIGBREAK (эквивалент Windows SIGQUIT); на самом деле я думаю, что единственным сигналом, который он может отправить на процессы Windows, является SIGTERM.
Итак, чтобы сделать длинный рассказ коротким и повторить заголовок: Как отправить произвольный сигнал процессу в Windows?