Как «застрял» (в результатах «сверху») относится к «не отвечает» (в Activity Monitor), «вращение» или «зависание»?

17

В результатах topкоманд я иногда вижу зависание .

Верхняя (1) страница руководства Apple по OS X не объясняет использование этого слова.

Как, если все это, застрял относится к следующему?

  1. не отвечает - может отображаться в Activity Monitor, в диалоге принудительного выхода из приложений окна входа в систему и т. д.
  2. .hang файлы - могут присутствовать на /Library/Logs/DiagnosticReports
  3. .spin файлы - могут присутствовать на /Library/Logs/DiagnosticReports

Там есть принятый ответ для первого пункта. Ответы, касающиеся пунктов 2 и 3, будут оценены.

Грэм Перрин
источник

Ответы:

15

Обычно не существует корреляции между зависшим процессом topи неотвечающим приложением:

  • Застрял означает, что процесс в настоящее время является непрерывным, что обычно имеет место, если процесс ожидает чтения диска или сетевого блока данных (или аналогичного низкоуровневого содержимого). Технически говоря, процесс выполняется в пространстве ядра (также называемом ядром Unix) и не может быть прерван (так что даже это kill -9не окажет никакого влияния). Обычно эти застрявшие состояния только последние миллисекунд (как вы можете видеть в topкачестве хорошо , потому что число застрявших процессов изменяется с каждым циклом дисплея).
  • неотвечающие приложения могут быть слишком заняты, чтобы ответить на любое событие, которое OS X бросает в них.

Я вижу одну ситуацию, когда застрявший процесс соответствует неотвечающему приложению: процесс может зависнуть на очень долгое время, возможно, бесконечно зависать без какой-либо возможности его уничтожить. Обычно это является результатом некоторой программной ошибки, например, неправильное отключение от сетевого устройства, после чего ядро ​​продолжает пытаться читать с него. В таких случаях даже принудительное завершение не удалит процесс.

Nohillside
источник
Спасибо - если застрял является синонимом непрерывного , то я знаком с этим состоянием. uninterruptibleЭто обычно видно, когда я нажимаю Control-T ( SIGINFO ) во время работы fsck_hfsиз командной строки. Больше на SIGINFOApple в termios (4) Страница OS OS Manual .
Грэм Перрин
В связи с этим ответом может быть интересен вопрос о переполнении стека: как идентифицировать процесс, не отвечающий на запросы, программно .
Грэм Перрин
2
Я взглянул на исходный код top: непрерываемый - то же самое, что застрял.
холме
Получил - основные моменты из libtop.c в открытом исходном коде для Mac OS X 10.7.4.
Грэм Перрин
1

Состояние процесса U, TH_STATE_UNINTERRUPTIBLE и состояние процесса Linux D

Кто-то еще обратил внимание на топ MacOS: «застрял» означает «бесперебойный» | nelsonslog

...  TH_STATE_UNINTERRUPTIBLE, который, как я полагаю, представляет собой psсостояние процесса "U". Я предполагаю, что это то, что Linux называет «D» для «Device Wait». В этом случае, в большинстве случаев, процесс в порядке, он ожидает завершения ввода-вывода. ...

Страница людей Ubuntu для пс подтверждает государственный процесс кода -

D    Uninterruptible sleep (usually IO)

- без каких-либо других упоминаний о бесперебойном .

Перекрестная ссылка на ядро ​​FreeBSD / Linux Linux:

Я нашел обсуждение 2002 года The Gang 83: Как убить процесс в режиме непрерывного сна? ( подчеркивает ), что хорошо согласуется с наблюдениями, сделанными @patrix.

И последнее, но не менее важное: публикация [X-Unix] PS и Stuck Processes ( выделение ) за 2004 год , в которой упоминается WindowServer , что хорошо согласуется с вопросом, связанным с который побудил меня опубликовать вопрос здесь:

Грэм Перрин
источник