Может ли существовать поток (thread) без процесса в Linux?

«Может ли существовать поток (thread) без процесса в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, поток не может существовать без процесса. С точки зрения ядра Linux, поток (lightweight process, LWP) — это просто задача (task), разделяющая с другими потоками часть ресурсов родительского процесса, такого как виртуальная память, файловые дескрипторы и сигналы.

DevOps-перспектива и мониторинг:

  • ps и top: Потоки одного процесса имеют один и тот же PID, но разные идентификаторы потоков (TID или LWP). Для их просмотра используйте ps -eLf или top -H.
  • Контейнеризация: Внутри контейнера Docker/Kubernetes все потоки принадлежат одному процессу PID namespace этого контейнера. Ограничения cgroups (например, cpu.cfs_quota_us) применяются ко всем потокам процесса совокупно.
  • Пример проблемы: Java-приложение (JVM) создает множество потоков. Если один поток в бесконечном цикле потребляет 100% одного ядра CPU, мониторинг по PID покажет высокую нагрузку, и для диагностики потребуется смотреть потоки (top -H -p <PID>).

Техническая суть: Процесс — это контейнер ресурсов, а поток — поток исполнения внутри этого контейнера. Уничтожение процесса (например, сигналом SIGKILL) убивает все его потоки.