“Остановился”, принадлежат “заблокированному” состоянию?

Если вы пытаетесь использовать ваш удаленный SSH-сервер в качестве SOCKS-прокси для вашего браузера, команда ssh, которую вы ищете:

ssh -N -D8080 <remote-sshd-machine>

Это запустит SOCKSv4/5-прокси на локальном хосте TCP-порта 8080, который позволит вам просматривать любой вебсайт с IP-адресом удаленного SSH-сервера. Однако, если вы пытаетесь получить доступ к удалённому сайту (например, whatsmyip.org) через localhost, обратите внимание на следующее:

  1. Удалённый сервер должен не использовать виртуальные хосты, основанные на именах. Виртуальный хостинг, основанный на имени, размещает несколько разных сайтов (например, example.com и example.org) на одном IP-адресе. Дифференциация между сайтами происходит исключительно по URL, указанному в браузере, так как и example.com и example.org будут преобразовываться в один и тот же IP. В вашем случае удалённый сервер посмотрит на URL, который является http://localhost и, вероятно, выдаст ошибку или сделает что-то непредсказуемое (Apache имеет тенденцию делать это!), потому что он не распознаёт доменное имя "локального хоста" в своём списке виртуальных хостов, основанных на именах.
  2. Удаленный сервер должен игнорировать тот факт, что номер порта изменился с 80 на 8080. Обычно большинство статических HTML сайтов и веб-серверов игнорируют это, однако, некоторые серверы и веб-приложения могут попытаться перенаправить вас на порт 80, что, очевидно, сломает вашу работу.

Если вы действительно хотите симулировать вышеизложенное (я не проверял это тщательно, и я не призываю вас делать привычку запускать ssh от имени root!), попробуйте следующее:

sudo ssh -N -L 127.0.0.1:80:whatsmyip.org:80 <remote-sshd-machine>

вам нужно sudo выше, потому что вы просите клиента ssh прослушивать порт 80, который <1024 и считается привилегированным портом, и только процессы, принадлежащие root, могут связываться с этими портами. Также обратите внимание, что вы не можете запустить на своем клиенте никакие другие службы на порту 80 (например, веб-сервер). Если это так, то вам нужно остановить эту службу и освободить порт 80 до того, как вы попробуете эту команду.

Во-вторых, добавьте следующую строку в /etc/hosts:

127.0.0.1 whatsmyip.org www.whatsmyip.org

Первая команда перенаправит TCP порт 80 на вашей локальной машине (SSH клиенте) на порт 80 на whatsmyip.org. Файл hosts обеспечит, что когда вы запрашиваете whatsmyip.org в вашем браузере, это имя преобразуется в имя вашего локального хоста. Таким образом, вы сохраняете номер порта и имя хоста, которое ваш браузер будет посылать на whatsmyip.org через SSH туннель. Как вы узнаете, что туннель работает? whatsmyip.org должен сообщать IP адрес SSH сервера (удаленной SSHd машины) вместо IP адреса вашего клиента.

1
03.09.2014, 09:20
2 ответа

Я не знаю, что вы имеете в виду под "заблокированным" состоянием, потому что в архитектуре Linux нет состояния, называемого "заблокированным". Но, я могу объяснить Вам, что означают эти состояния:

Если Вы запустите команду из оболочки, предположим sleep 100, то она сначала попадет в состояние R. Она выполняется, но не очень долго, всего несколько кусочков процессорного времени. Несколько раз betwixt он будет в состоянии непрерывного сна D, потому что он ждет жесткого диска. Тогда он попадает в состояние сна прерывистого S .

Если нажать Ctrl+Z, вы отправляете SIGSTOP в процесс. После этого процесс перейдет в состояние остановки T. Он останется в этом состоянии до тех пор, пока не будет отправлен сигнал SIGCONT. В этом состоянии процесс не получит процессорного времени.

При выходе из процесса он попадает в состояние зомби Z до тех пор, пока родительский процесс не вызовет функцию waitpid(), после чего ядро удалит ПИД-регулятор.

3
27.01.2020, 23:52

Blocking (computing): Holding up a Task

Blocking (football): Running Interference

(прямо из википедии)


Я сделал беспорядок, дико относительно -определения "заблокированного состояния" процесса. Теперь я чувствую, что был неправ и прав одновременно. Теперь я систематически соединяю слова и вещи. Пожалуйста, помогите, комментируя и т. д.


Я проанализировал «блок» как человеческое слово. {Блок} в вычислениях. И «блокировка» , когда речь идет о процессах планирования . Последнее имеет дополнительную сложность, что неудивительно. Но все семантически связано и имеет смысл.

Слово (, например. фр. блок :"большой кусок дерева"; напрямую связан с "exec" даже:

Анна Болейн отправилась в блок(базовый пример на cambridge.org)

...начинается очень материально. Здесь блок — это не абстракция, а только «идти к нему».

Блок в вычислениях , как и в block deviceи многих других, является просто логическим "фрагментом". Из контекста на 99% очевидно, какой тип блока вы имеете в виду. Они всегда важны. Вы можете, например. разделить блок памяти после malloc()или около того, чтобы эффективно управлять частями.

Я ищу слово «блок» на языке программирования K&R C в указателе. Основная запись — «блочная структура» -> стр. 55. Это начало:

chapter 3 Control Flow

"...order of computations..."

3.1 Statements and Blocks

3.2 If-Else

Все на той же странице, очень высокий уровень, фундаментальный.


Блоки и поток управления связаны в C. Больше, чем просто связаны.


Заключение:Блоки в C используются для управления потоком вычислений.


Намек на более глубокое значение, чем просто фрагмент с «размером блока», можно увидеть вman dd:nonblock use non-blocking I/O.Таким образом, блокировка и IO-активность связаны.

So now what about linux processes (="tasks") in some "blocked" and "ready" process state?

Мой сжатый ответ на OQ:

D is "blocked" (by I/O delay/wait)
T is "blocked" (by job control)
S is "ready" (to go to R "running")

Это мой ответ на OQ :Какое из этих состояний процесса ps S, T и D можно отнести к состоянию "заблокировано"? (состояние «заблокировано», определяемое как :процесс удален из очереди выполнения )

Еще лучше напрямую спросить :Как планировщик Linux реализует состояния процессов? Он тоже "заблокирован"? Почему "S" (для сна )"готов"?

Почему R=running или runnable (в очереди выполнения)в виде списков man ps? Или?

Вики говорят, что «очередь выполнения» содержит «готовые» процессы, и

ps говорит, что "очередь выполнения" - это "R", и со всеми обычными процессами "S", которые я вижу:

Возможно, возникла проблема с очередью выполнения слов. Это решающий фактор. Как он на самом деле реализован в ядре? Или man ps использует «очередь выполнения» немного расплывчато, может быть, для других платформ, по историческим причинам? В конце концов, PS не был сделан для Linux. Linux и ps, и unix, они просто разделяют некоторые базовые концепции.

Очевидно, здесь есть некоторое несоответствие. Похоже, что все процессы «S» находятся между «готово» и «заблокировано». В то время как вики подчеркивает «блокировку», Linux полагается на различные состояния сна, и man psне очень помогает разобраться, что именно означает «R» (и, следовательно, также «S» ).

Очередь выполнения — это слово. Сначала концепция. Должен быть каким-то образом реализован в планировщике. Торвальдс также назвал свои процессы «задачами», в основном, они все еще являются процессами, а не потоками, концептуально. Но вы не называете свою реализацию как общий термин. «Задачи», как в:

'kernel/hung _task.c -поток ядра для обнаружения задач зависших в состоянии D '

— это реализация процессов в Linux. Центральный процессор обрабатывает. «Следует» говорить о задачах, когда мы имеем в виду перспективу ядра,и процессов, когда мы имеем в виду научную концепцию :, результат непрерывного действия процессора.

Я никогда не замечал/не осознавал, как много в этом кроется man ps. Но опять же, это не введение в методы планирования . И я слышал много предупреждений о легких интерпретациях. По крайней мере, это должно быть представлено в таком логическом порядке, от активного к особому:

R    Running or runnable (on run queue)
S    Sleep (waiting for an interruption)  
T    suspended or stopped by job control signal 
     (t    stopped by debugger during the tracing)
D    uninterruptible sleep (usually IO)

и затем некоторые особые состояния:

I    Idle kernel thread
Z    for "Zombie", an intermediate state before removal by parent
X    dead (should not be seen)
W    not valid after 2.6.x: paging 

Похоже, что даже состояние процесса R для «выполняется» неясно :он просто находится в очереди на выполнение или это означает, что в данный момент у процесса есть процессорное время? "S" в очереди выполнения или нет? Очередь выполнения и блокировка не могут быть разделены. Может быть, вместо этого в Linux есть таблица sched _и состояния сна? В сумме одинаковые, но не напрямую сопоставимые?

Поскольку "R" и "S" кажутся очевидными из экспериментов:

$  cmd='ps x'
$  $cmd |grep "$cmd"
32005 pts/1    R+     0:00 ps x
32006 pts/1    S+     0:00 grep ps x

Each command in a pipeline is executed as a separate process

Пока работает ps, процесс grep находится в спящем режиме, но в этой ситуации он выглядит вполне готовым. Он получил более высокий pid --, оболочка уже запустила его, иначе мы бы его не увидели. Теперь это факт;)

Команда сама по себе является рекурсивной. Работает и без конечно.

(Я использую psиспользуется, чтобы узнать о man psи процессах.)

Этот ответ — круг. Должно быть почти. Речь идет о планировщике и процессоре. Слишком сложно. Слишком многомерно.


...


И если в ядре нет очереди запуска , я начну заново.

Что такое заблокированный процесс? заблокирован из очереди?


Что такое заблокированная машина? Во время события (автомобильная гонка ), автомобили (посетители )также могут быть "заблокированы" от выезда на главную дорогу. Они паркуются на боковой дороге.

Другие автомобили, уже находящиеся на дороге, могут застрять по разным причинам.Они также должны покинуть трассу.

Таким образом, и разбитая гоночная машина, и припаркованная машина для посетителей оказываются где-то рядом с трассой.

То же самое с процессами :любой процесс, который не может или не хочет (ctl -Z )получать процессорное время, т. е. фактически «запускаться», принадлежит припаркованному где-то вне очереди выполнения. Очередь выполнения представляет собой список высокой ротации только для «готовых» процессов («S» задач ), ожидающих перехода в «R».

-2
27.01.2020, 23:52

Теги

Похожие вопросы