Что означает состояние «прерывистый сон»?

18

У меня был Firefox, запущенный на Parted Magic LiveCD, затем (возможно) в результате комбинации клавиш, которые я не помню, он быстро исчез с экрана и панели задач / списка окон.

Тем не мение:

  1. ps ax | grep firefoxвозвращает ниже (и ненужную grep firefoxстроку). Как psи диспетчер задач с графическим интерфейсом, покажите Firefox с, казалось бы, неизменными RSS, VM-SIZE и 0% загрузки ЦП.

    Johndoe 1916 36,6 14,0 923772 504372 tty1 Sl 13:30 12:15 firefox


  2. pstree | grep firefox возвращает:

    init─┬─2 * [ROX-Filer───firefox───25 * [{светлячок}]]


  3. strace -p 1916 возвращается и, казалось бы, остается на этой линии навсегда:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Я понимаю из ответа на Что означают значения столбца STAT в пс? это S(in Sl) указывает, что процесс находится в interruptible sleepсостоянии.

Кто-нибудь может подробнее рассказать о том, что такое государство?

РЕДАКТИРОВАТЬ

Я начну новый вопрос с более подробной информацией о моем дистрибутиве, чтобы ответить на первоначальный 2-й вопрос.

user66001
источник
@Braiam - Готово. Я не хотел этого делать, так как в первый раз я каким-то образом обратился за помощью к проблеме, в дискуссии, основанные на убеждении, что я использовал Parted Magic в качестве дистрибутива на полный рабочий день. Я искренне надеюсь, что на этот раз этого не произойдет :(
user66001

Ответы:

18

@msw проделал хорошую работу, объясняя ваш второй вопрос и некоторые из ваших первых:

Б) Предложить какие-либо относительно простые способы восстановить любую форму контроля, чтобы (по крайней мере) сохранить вкладки, которые я досадно открыл в режиме приватного просмотра?

Поэтому я постараюсь обратиться к вашему 1-му вопросу немного подробнее:

А) Уточните, что такое состояние, более подробно?

Значения состояния Sl(это строчная буква L):

   S    Interruptible sleep (waiting for an event to complete)
   l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

                 жизненный цикл процесса

PROCESS STATE CODES
   R  running or runnable (on run queue)
   D  uninterruptible sleep (usually IO)
   S  interruptible sleep (waiting for an event to complete)
   Z  defunct/zombie, terminated but not reaped by its parent
   T  stopped, either by a job control signal or because
      it is being traced
   [...]

Дальнейшие подробности можно увидеть на странице справки по сигналу, man 7 signalа также в этом руководстве под названием: Состояния процесса Linux .

SLM
источник
Очень (!) Полезно для понимания внутренней работы. Благодарность! +1
user66001
@ user66001 принять ответ. Это также поможет мне спасибо.
muneeb_ahmed
8

Вы ничего не сделали с процессом Firefox. Это было уже в состоянии S раньше. «Прерываемый сон» фактически означает бездействие. Процесс ждет и проснется, когда получит вход. Это нормальное состояние процесса, если вы не уловите его, пока он занят.

Вы заставили окно исчезнуть. Может быть, вы отправили его на другой рабочий стол. Как вернуть его «нормальным» способом, полностью зависит от вашего оконного менеджера, который вы не указали.

Вы можете получить окно с помощью других инструментов, но это в некоторой степени зависит от того, что именно с ним произошло, и от того, взаимодействует ли ваш оконный менеджер. Попробуйте wmctrl . Сначала перечислите окна Firefox с wmctrl -l | grep Firefox. Обратите внимание на идентификатор окна в первом столбце, скажем, 0x12345678. Чтобы вернуть окно на текущий рабочий стол, используйте wmctrl -R 0x12345678; в качестве альтернативы используйте wmctrl -a 0x12345678для переключения на рабочий стол. Чтобы максимизировать его (который заботится об окнах за пределами экрана или сокращается до одного пикселя), запустите wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. Или переместите и измените размер окна с помощью wmctrl -r 0x12345678 -e 1,50,100,1000,800. Возможно, вам придется отменить или показать окно с помощью wmctrl -r 0x12345678 -b remove,shadedили wmctrl -r 0x12345678 -b remove,hidden.

Жиль "ТАК - перестань быть злым"
источник
Спасибо, Жиль. Это может показаться необычным, но я не уверен, какой оконный менеджер я использую. Может ли это быть LXDE (в списке около LXPanel)? Кроме того, wmctrl, по-видимому, недоступен в моем дистрибутиве - пожалуйста, прости меня за невежество, но можно ли просто загрузить и запустить wmctrl, или он должен быть установлен (зависимости и т. Д.)?
user66001
@ user66001 LXDE - это среда рабочего стола. Его оконный менеджер по умолчанию - Openbox (я не уверен, поддерживает ли он другой). Если в вашем дистрибутиве нет wmctrl, вы можете попробовать загрузить исходный код и скомпилировать его. Это зависит от нескольких библиотек, но ни одна из них не является экзотической, все они должны быть предоставлены вашим дистрибутивом. Если у вас есть xdotool, он может сделать все это, или, по крайней мере, тот, который полезен, так что попробуйте (посмотрите на команды окна и команды рабочего стола и окна в руководстве).
Жиль "ТАК - перестань быть злым"
Ах, спасибо. Нет xdotool- когда вы имеете в виду, что «может быть в состоянии сделать все это», вы говорите о компиляции wmctrlили операциях, которые вы можете выполнять с ним? Можете ли вы указать мне какие-либо рекомендуемые руководства по компиляции исходных кодов Linux (новичок в Linux из среды Windows)?
user66001
@ user66001 Я имел в виду, xdotoolи у wmctrlменя схожая функциональность (что касается того, что вам здесь нужно, они отличаются тем, что еще они предлагают). Если вы новичок в Linux, я рекомендую дистрибутив с большим количеством пакетов. Если вы используете RHEL или такой вариант, как CentOS или Scientific Linux, в Repoforge есть пакет . Если вы хотите собрать из исходного кода, прочитайте это - но было бы легче установить пакет, если вы сможете найти его.
Жиль "ТАК - перестань быть злым"
Есть ли разница в том, какой инструмент легче построить? Кроме того, если у кого-то не было менеджера пакетов в их дистрибутиве, какой тип? Пакета? нужно ли искать (полагаю, это нелогичный вопрос, но на всякий случай я ошибаюсь, полагая, что пакет - это просто набор двоичных файлов со списком зависимостей и изменениями конфигурации, подумал я бы спросил)?
user66001
2

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

Для Firefox только (и некоторых других программ , таких как Gvim или Chrome , которые делают специальные условия для хранения состояния в аварии) простой:

$ kill -TERM pid

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

MSW
источник
Весьма маловероятно, что локальный X-клиент потеряет связь с X-сервером, особенно в результате нажатия клавиши. Убийство Firefox не сохранит информацию об окнах в режиме приватного просмотра.
Жиль "ТАК - перестань быть злым"
Я использую Lazarus и (когда не использую режим приватного просмотра, чтобы попытаться переключить мою основную учетную запись gmail, чтобы открыть gdoc для просмотра / редактирования документов, используя информацию с веб-сайтов в соседних вкладках, без выхода из всех моих учетных записей gmail). - Grr, Google) есть FF "Запомнить мои окна и вкладки с прошлого раза", поэтому я забочусь только о вкладках, открытых в режиме приватного просмотра. Таким образом, хотя хорошо знать приведенный выше аргумент kill, я сомневаюсь, что FF спасет мои вкладки в этой ситуации. Есть ли способ для FF присоединиться к X?
user66001
"Есть ли способ для FF присоединиться к X?" поскольку я никогда не мог понять, как окно может быть отображено / разрушено без получения клиентским процессом сигнала, я предполагаю, что сокет от программы FF к пользовательскому интерфейсу остается открытым. Пока процесс подключен к сокету, я не знаю, каким образом любой процесс мог бы подключиться к нему. (Теперь, когда вы заставили меня задуматься об этом, я подозреваю, что это происходит из-за ошибки протокола между X-сервером и клиентом, которая безумно трудна (т.е. я никогда не буду пытаться) отлаживать).
MSS