Що вказує стан "переривного сну"?


18

У мене Firefox працював на Розділеному Magic LiveCD, тоді (можливо) в результаті комбінації клавіш, яку я не пам'ятаю, він швидко зник з екрана та панелі завдань / списку вікон.

Однак:

  1. ps ax | grep firefoxповертає нижче (і непотрібний grep firefoxрядок). І psменеджер завдань GUI, показують 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 * [{firefox}]]


  3. strace -p 1916 повертається і, здавалося б, залишається на цій лінії назавжди:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Я розумію з відповіді на те, що означають значення стовпців STAT у ps? що S(in Sl) вказує, що процес знаходиться у interruptible sleepстані.

Чи може хтось детальніше розглянути, що таке держава?

EDIT

Я розпочну нове запитання з більш детальною специфікою мого дистрибутива, щоб вирішити оригінальне 2-е питання.


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

Відповіді:


18

@msw зробив гарну роботу, пояснивши ваш другий Q, а також частину першого:

B) Запропонуйте будь-які відносно прості способи відновити будь-яку форму контролю, щоб (принаймні) зберегти вкладки, які я дратівливо відкривав у режимі приватного перегляду?

Тому я спробую трохи більше звернутися до вашого першого запитання:

А) Детальніше про те, що таке держава, детальніше?

Значення стану 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 man», man 7 signalа також у цьому підручнику під назвою: Стан процесу Linux .


Дуже (!) Корисно для розуміння внутрішньої роботи. Спасибі! +1
user66001

@ user66001 прийняти answer.it також допоможе мені спасибі.
muneeb_ahmed

8

Ви нічого не зробили з процесом Firefox. Раніше він уже був у стані S. "Переривчастий сон" ефективно означає простоювати. Процес чекає і прокинеться, коли отримає вхід. Це нормальний стан процесу, якщо ви його не вловили, поки він зайнятий.

Ви змусили вікно зникнути. Можливо, ви надіслали його на інший робочий стіл. Як повернути його "нормальним" способом, повністю залежить від вашого менеджера вікон, якого ви не вказали.

Ви можете отримати вікно за допомогою інших інструментів, але це дещо залежить від того, що саме з ним трапилося та чи співпрацює ваш менеджер вікон. Спробуйте wmctrl . Перший список Windows 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

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


Навряд чи локальний клієнт X втратить зв’язок із сервером X, особливо внаслідок натискання клавіші. Вбивство Firefox не збереже інформацію про Windows у режимі приватного перегляду.
Жил "ТАК - перестань бути злим"

Я використовую Lazarus і (коли не використовую режим приватного перегляду, щоб спробувати переключити свій основний обліковий запис gmail, відкрити gdocs для перегляду / редагування документів, використовуючи інформацію з веб-сайтів, що містять суміжні вкладки, не виходячи з усіх моїх акаунтів gmail - Grr, Google) мають FF "Запам'ятати мої вікна та вкладки минулого разу", тому я дбаю лише про вкладки, відкриті в режимі приватного перегляду. Тож, хоча добре знати цей аргумент kill, я сумніваюся, що ФФ врятував би мої вкладки в цій ситуації. Будь-який спосіб FF повторно приєднатися до X?
user66001

"Будь-який спосіб FF повторно приєднатися до X?" тому що я ніколи не міг зрозуміти, як вікно можна скасувати / знищити без отримання клієнтським процесом сигналу, я вважаю, що сокет від програми FF до інтерфейсу користувача залишається відкритим. До тих пір, поки процес підключений до сокета, я не знаю, що будь-який процес міг би скористатися цим. (Тепер, коли ви змусили мене подумати про це, я підозрюю, що це сталася помилка протоколу між сервером X і клієнтом, що шалено важко (тобто я ніколи не намагався) налагоджувати).
msw
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.