Comment «bloqué» (dans les résultats de «haut») est-il lié à «ne répond pas» (dans le moniteur d'activité), «tourne» ou «se bloque»?

17

Dans les résultats des topcommandes, je vois parfois coincé .

La page de manuel supérieure (1) OS X d' Apple n'explique pas cette utilisation du mot.

Comment, si tout cela est lié à ce qui suit?

  1. ne répond pas - peut être vu dans le moniteur d'activité, dans la boîte de dialogue Forcer à quitter les applications de loginwindow, etc.
  2. .hang fichiers - peuvent être présents à /Library/Logs/DiagnosticReports
  3. .spin fichiers - peuvent être présents à /Library/Logs/DiagnosticReports

Il y a une réponse acceptée pour le premier point. Les réponses relatives aux points 2 et 3 seront appréciées.

Graham Perrin
la source

Réponses:

15

Il n'y a généralement pas de corrélation entre un processus bloquétop et une application qui ne répond pas:

  • bloqué signifie que le processus est actuellement non interruptible, ce qui est généralement le cas si le processus attend la lecture d'un disque ou d'un bloc de données réseau (ou autre élément similaire de bas niveau). Techniquement parlant, le processus s'exécute dans l'espace du noyau (alias noyau Unix) et ne peut pas être interrompu (donc même un kill -9n'a aucun impact). Habituellement, ces états bloqués ne durent que quelques millisecondes (comme vous pouvez également le voir topcar le nombre de processus bloqués change à chaque cycle d'affichage).
  • les applications qui ne répondent pas peuvent être trop occupées pour répondre à tout événement que OS X leur lance.

Je vois une situation où un processus bloqué correspond à une application qui ne répond pas: un processus peut être bloqué très longtemps, peut-être bloqué à l'infini, sans possibilité de le tuer. Ceci est généralement le résultat d'une erreur de programmation, par exemple une déconnexion incorrecte d'un périphérique en réseau, puis le noyau continue d'essayer de le lire. Dans de tels cas, même une résiliation forcée ne supprimera pas le processus.

nohillside
la source
Merci - si bloqué est synonyme d' interruption , alors je connais cet état. uninterruptibleest généralement vu lorsque je tape Control-T ( SIGINFO ) lors de l'exécution à fsck_hfspartir de la ligne de commande. Plus sur le sujet SIGINFOdans Apple de termios (4) OS X Manuel Page .
Graham Perrin
En lien avec cette réponse, une question dans Stack Overflow peut être intéressante: comment identifier le processus qui ne répond pas par programme .
Graham Perrin
2
J'ai jeté un œil au code source de top: ininterruptible est le même que bloqué.
nohillside
Gotcha - faits saillants de libtop.c en open source pour Mac OS X 10.7.4.
Graham Perrin
1

État de processus U, TH_STATE_UNINTERRUPTIBLE et état de processus Linux D

Quelqu'un d'autre a attiré l'attention sur le dessus de MacOS: «coincé» signifie «sans interruption» | nelsonslog

…  TH_STATE_UNINTERRUPTIBLE, Ce qui, à mon avis, correspond à l' psétat de processus «U». Je suppose que c'est ce que Linux appelle «D» pour «Device Wait». Dans ce cas, dans la plupart des cas, le processus est correct, il attend la fin de certaines E / S. …

La page de manuel Ubuntu pour ps confirme un code d'état de processus -

D    Uninterruptible sleep (usually IO)

- sans autre mention d' interruption .

Dans FreeBSD / Linux Linux Kernel Cross-Reference:

J'ai trouvé une discussion de 2002 The Answer Gang 83: Comment tuer un processus en état de sommeil sans interruption? ( faits saillants ) qui cadre bien avec les observations faites par @patrix.

Enfin et surtout, un article de 2004 [X-Unix] PS et Stuck Processes ( faits saillants ) mentionnant WindowServer , qui correspond bien à la question liée au qui m'a incité à publier la question ici:

Graham Perrin
la source