1

Я был в том же месте, что и этот парень, где я думал, что процесс вызвал зависание bash, но вместо этого это заняло некоторое время. Я запустил gem install berkshelf , и, к счастью, этот процесс обнаружился в Activity Monitor, так что я знал, что он все еще идет, но есть ли более надежный способ сделать это?

2 ответа2

3

Вы на самом деле не можете определить разницу между зависанием процесса или "просто на время". Процесс может реагировать на сигналы, но не обязан .

Когда процесс "зависает", он, вероятно, застрял в бесконечном цикле или ожидает какого-то события, которое никогда не произойдет. Но это также может сделать большую работу.

Например, процесс, который выполняет интенсивную работу, может не сразу реагировать на Ctrl-C (сигнал завершения SIGINT ), но может завершиться немного позже или не завершиться вовсе. Обычно это тот случай, когда вы отправляете SIGKILL , который не может быть проигнорирован процессом.

Обратите внимание, что во всей этой ситуации фактическая оболочка (например, Bash) никогда не зависает. Проще говоря, оболочка просто выполняет процесс и выводит его на первый план. Вы все еще можете приостановить процесс и продолжить его выполнение в фоновом режиме (Ctrl-Z, затем bg). Ваша оболочка все еще будет работать.

1

Хорошая вещь, чтобы сделать, это запустить процессы, которые занимают много времени в подробном режиме. Таким образом, вы можете видеть прогресс, и если он зависает, вы знаете, где и можете (надеюсь) решить проблему. Также (по умолчанию с stty sane) Ctrl+C отправляет SIGINT , но Ctrl+Z отправляет SIGTSTP .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .