Как Mecki, на который указывают, launchd был бы способом пойти с этим. Существует графический интерфейс для launchd, названного Lingon, который Вы могли бы хотеть проверить, в противоположность редактированию launchd файлов вручную:
Lingon является графическим интерфейсом пользователя для создания редактирования launchd конфигурационные файлы для Mac OS X Leopard 10.5.
[надрез...]
Редактирование конфигурационного файла легче чем когда-либо в этой версии, и это имеет два различных режима. Основной Режим, который имеет наиболее распространенные настройки, легко доступные в очень простом интерфейсном и Опытном Режиме, где можно добавить все настройки или непосредственно в тексте или вставить их через меню.
В Linux потоки Java реализованы с помощью собственных потоков, поэтому программа Java, использующая потоки, ничем не отличается от собственной программы, использующей потоки. «Поток Java» - это просто поток, принадлежащий процессу JVM.
В современной системе Linux (в которой используется NPTL) все потоки, принадлежащие процессу, имеют одинаковый идентификатор процесса и идентификатор родительского процесса, но разные идентификаторы потока. Вы можете увидеть эти идентификаторы, запустив ps -eLf
. Столбец PID - это идентификатор процесса, столбец PPID - это идентификатор родительского процесса, а столбец LWP - это идентификатор потока (LightWeight Process). «Основной» поток имеет идентификатор потока, который совпадает с идентификатором процесса, а дополнительные потоки будут иметь другие значения идентификатора потока.
Старые системы Linux могут использовать реализацию потоковой передачи «linuxthreads», который не полностью совместим с POSIX, вместо NPTL. В системе linuxthreads потоки имеют разные идентификаторы процесса.
Вы можете проверить, использует ли ваша система NPTL или linuxthreads, запустив системную библиотеку C (libc) как отдельную программу и посмотрев в ее выводе в разделе «Доступные расширения». Следует упомянуть либо «Нативную библиотеку потоков POSIX», либо потоки linux. Путь к библиотеке C варьируется от системы к системе: это может быть /lib/libc.so.6
, /lib64/libc.so.6
(в 64-битной RedHat -системы) или что-то вроде /lib/x86_64-linux-gnu/libc.so.6
(в современных системах на базе Debian, таких как Ubuntu).
На уровне ОС они не работают. нет имен; они существуют только в JVM.
Функция pthread_kill ()
C может использоваться для отправки сигнала определенному потоку, который можно использовать для попытки убить этот конкретный поток извне JVM, но я не знаю, как JVM ответит на это. Это может просто убить всю JVM.
Нет стандарта; это полностью зависит от используемой вами реализации Java. Также не путайте «собственные потоки» и «собственные процессы». Процесс - это изолированная сущность, которая не может видеть адресное пространство других процессов. Поток - это то, что выполняется в адресном пространстве собственного процесса и может видеть в памяти других потоков того же процесса.
То, что вы видите в Linux, - это нечто иное: некоторые версии Linux создают запись в таблица процессов для каждого потока родительского процесса. Эти «процессы» не являются реальными процессами (в смысле изоляции). Это потоки, которые можно просмотреть с помощью команды ps
. Вы можете найти процесс, который их создал, используя родительский PID (PPID).
Нет универсального решения, как потоки Java отображаются в потоки ОС, если вообще не существует. Каждая реализация JVM может делать это по-своему.
Существует также чистая реализация потока Java, называемая зелеными потоками . Это используется как запасной вариант, если собственные потоки не работают. t или система вообще не многопоточная. Вы не увидите никаких зеленых потоков в вашей ОС.
Можно ли приостановить или убить запущенные потоки Java из другого кода Java?
Если они работают на той же самой JVM, да, с помощью stop (). Но это не очень хорошее решение и может сработать, а может и нет. interrupt () позволяет потоку безопасно отключиться.
Нет никакого способа убить потоки за пределами JVM, о которых я знаю. Если ОС действительно поддерживает уничтожение потоков, я бы не ожидал, что после этого приложение Java будет работать правильно!
interrupt () позволяет потоку безопасно отключиться.Нет никакого способа убить потоки за пределами JVM, о которых я знаю. Если ОС действительно поддерживает уничтожение потоков, я бы не ожидал, что после этого приложение Java будет работать правильно!
interrupt () позволяет потоку безопасно отключиться.Нет никакого способа убить потоки за пределами JVM, о которых я знаю. Если ОС действительно поддерживает уничтожение потоков, я бы не ожидал, что после этого приложение Java будет работать правильно!
Могут ли запущенные потоки Java быть приостановлено или убито с другой Java код?
Теоретически да. На практике методы Thread.kill ()
и Thread.suspend ()
не рекомендуются, поскольку они небезопасны, за исключением очень ограниченных ситуаций. Основная проблема заключается в том, что завершение или приостановка потока Java может испортить другие потоки, зависящие от него, и общие структуры данных, которые, возможно, находились в процессе обновления.
Если «другой код Java» предназначен для означают другую JVM, тогда шансы на ее работу еще меньше. Даже если вы выяснили, как послать соответствующий сигнал потока, результаты совершенно непредсказуемы. Я уверен, что "целевая" JVM выйдет из строя.