Những gì nhà nước gián đoạn giấc ngủ gián tiếp chỉ ra những gì?


18

Tôi đã có Firefox chạy trên Parted Magic LiveCD, sau đó (có thể) là kết quả của một tổ hợp phím mà tôi không nhớ, nó nhanh chóng biến mất khỏi màn hình và Danh sách thanh tác vụ / cửa sổ.

Tuy nhiên:

  1. ps ax | grep firefoxtrả về bên dưới (và grep firefoxdòng không cần thiết ). Cả psTrình quản lý tác vụ GUI, đều hiển thị firefox với mức độ sử dụng RSS, VM-SIZE và 0% CPU dường như không thay đổi.

    johndoe 1916 36.6 14.0 923772 504372 tty1 Sl 13:30 12:15 firefox


  2. pstree | grep firefox trả về:

    init─┬─2 * [ROX-Filer───firefox───25 * [{firefox}]]


  3. strace -p 1916 trở lại, và dường như ở lại dòng này mãi mãi:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Tôi hiểu từ một câu trả lời cho các giá trị cột STAT trong ps có nghĩa là gì? rằng S(trong Sl) chỉ ra rằng quá trình ở interruptible sleeptrạng thái.

Bất cứ ai có thể xây dựng như những gì nhà nước, chi tiết hơn?

BIÊN TẬP

Tôi sẽ bắt đầu một câu hỏi mới, với chi tiết cụ thể hơn trên bản phân phối của tôi, để giải quyết câu hỏi thứ 2 ban đầu.


@Braiam - Xong. Tôi đã miễn cưỡng làm điều này, như lần đầu tiên tôi làm, bằng cách nào đó, sự giúp đỡ đã biến mất khỏi vấn đề, thành các cuộc thảo luận dựa trên niềm tin tôi đang sử dụng Phép thuật chia cắt làm bản phát hành toàn thời gian của mình. Tôi chân thành hy vọng rằng điều này sẽ không xảy ra lần này :(
user66001

Câu trả lời:


18

@msw đã làm tốt công việc giải thích Q thứ 2 của bạn và một số thứ 1 của bạn:

B) Đề xuất bất kỳ cách tương đối dễ dàng nào để lấy lại bất kỳ hình thức kiểm soát nào, để (ít nhất) lưu các tab tôi đã mở một cách khó chịu trong chế độ Duyệt web riêng tư?

Vì vậy, tôi sẽ cố gắng và giải quyết Q đầu tiên của bạn một chút nữa:

A) Xây dựng như nhà nước là gì, chi tiết hơn?

Các giá trị trạng thái Sl(Đó là chữ thường L):

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

                 vòng đời của quá trình

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
   [...]

Thông tin chi tiết có thể được nhìn thấy trong trang man tín hiệu man 7 signal, cũng như trong hướng dẫn này, có tiêu đề: trạng thái quá trình Linux .


Rất (!) Hữu ích cho việc hiểu các hoạt động bên trong. Cảm ơn! +1
dùng66001

@ user66001 chấp nhận câu trả lời. Tôi cũng giúp tôi cảm ơn.
muneeb_ahmed

8

Bạn đã không làm gì với quy trình Firefox. Nó đã ở trạng thái S trước đó. Giấc ngủ gián đoạn có hiệu quả có nghĩa là nhàn rỗi. Quá trình đang chờ và sẽ thức dậy khi nhận được đầu vào. Đó là trạng thái bình thường của một quá trình trừ khi bạn bắt kịp nó trong khi nó bận rộn.

Bạn đã làm cho cửa sổ biến mất. Có lẽ bạn đã gửi nó đến một máy tính để bàn khác. Làm thế nào để đưa nó trở lại cách thức bình thường của người Bỉ hoàn toàn phụ thuộc vào trình quản lý cửa sổ của bạn mà bạn không chỉ định.

Bạn có thể truy xuất cửa sổ bằng các công cụ khác nhưng phần nào phụ thuộc vào chính xác những gì đã xảy ra với nó và liệu trình quản lý cửa sổ của bạn có hợp tác hay không. Hãy thử wmctrl . Đầu tiên liệt kê các cửa sổ Firefox với wmctrl -l | grep Firefox. Lưu ý ID cửa sổ trong cột đầu tiên, giả sử 0x12345678. Để đưa một cửa sổ trở lại máy tính để bàn hiện tại, sử dụng wmctrl -R 0x12345678; cách khác, sử dụng wmctrl -a 0x12345678để chuyển sang máy tính để bàn của nó. Để tối đa hóa nó (chăm sóc các cửa sổ bên ngoài màn hình hoặc thu nhỏ lại thành một pixel), hãy chạy wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. Hoặc, di chuyển và thay đổi kích thước cửa sổ với wmctrl -r 0x12345678 -e 1,50,100,1000,800. Bạn có thể cần làm mờ hoặc bỏ ẩn cửa sổ bằng wmctrl -r 0x12345678 -b remove,shadedhoặc wmctrl -r 0x12345678 -b remove,hidden.


Cảm ơn Gilles - Điều này nghe có vẻ bất thường, nhưng tôi không chắc tôi đang chạy Trình quản lý cửa sổ nào. Nó có thể là LXDE (Được liệt kê trong hộp về LXPanel) không? Ngoài ra, wmctrl dường như không có sẵn trên bản phân phối của tôi - Xin vui lòng tha thứ cho sự thiếu hiểu biết của tôi, nhưng wmctrl có thể được tải xuống và chạy hay phải cài đặt (phụ thuộc, v.v.)?
user66001

@ user66001 LXDE là môi trường máy tính để bàn. Trình quản lý cửa sổ mặc định của nó là Openbox (Tôi không chắc nó có hỗ trợ một cái khác không). Nếu bản phân phối của bạn không có wmctrl, bạn có thể thử tải xuống nguồn và biên dịch nó. Nó phụ thuộc vào một vài thư viện, nhưng không có thư viện nào là kỳ lạ, tất cả chúng nên được cung cấp bởi bản phân phối của bạn. Nếu bạn có xdotool, nó có thể thực hiện tất cả những điều này, hoặc ít nhất là một trong số đó hữu ích, vì vậy hãy thử nó (xem các lệnh của cửa sổ và các lệnh của máy tính để bàn và cửa sổ trong hướng dẫn).
Gilles 'SO- ngừng trở nên xấu xa'

À, cảm ơn. Không có xdotoolgì - Khi bạn muốn nói nó "có thể thực hiện được tất cả những thứ này", bạn đang nói về việc biên dịch wmctrl, hay các thao tác mà bạn có thể thực hiện với nó? Bạn có thể chỉ cho tôi bất kỳ hướng dẫn được đề xuất nào trong việc biên dịch các nguồn Linux (Mới đối với Linux, từ môi trường Windows) không?
user66001

@ user66001 Ý tôi là xdotoolwmctrlcó chức năng tương tự (theo như những gì bạn cần ở đây, chúng khác nhau ở những gì chúng cung cấp). Nếu bạn chưa quen với Linux, tôi khuyên bạn nên phân phối với nhiều gói hơn. Nếu bạn đang chạy RHEL hoặc một biến thể như CentOS hoặc Khoa học Linux, thì có một gói trên Repoforge . Nếu bạn muốn xây dựng từ nguồn, hãy đọc phần này - nhưng sẽ dễ dàng hơn để cài đặt một gói nếu bạn có thể tìm thấy một gói.
Gilles 'SO- ngừng trở nên xấu xa'

Bất kỳ sự khác biệt trong công cụ nào sẽ dễ dàng hơn để xây dựng? Ngoài ra, nếu một người không có trình quản lý gói trong bản phân phối của họ, thì loại gói nào? người ta nên tìm kiếm (tôi đoán rằng đây là một câu hỏi phi logic, nhưng chỉ trong trường hợp tôi sai khi cho rằng một gói chỉ là một gói nhị phân, với các phụ thuộc được liệt kê và thay đổi cấu hình, tôi nghĩ tôi sẽ hỏi)?
dùng66001

2

Có thể các máy khách X bị mất kết nối và bằng cách nào đó không được thông báo về nó. Quá trình thường sẽ chờ đợi trên ổ cắm mà không có gì sẽ đến, khiến nó chìm trong một giấc ngủ không ngớt.

Đối với Firefox chỉ (và một số chương trình khác như gvim hoặc Chrome mà trích lập dự phòng đặc biệt để lưu trữ nhà nước trong thất bại) một cách đơn giản:

$ kill -TERM pid

sẽ tạo cơ hội cho quá trình lưu danh sách các tab đang mở, nhưng tôi sẽ không dựa vào nội dung biểu mẫu hoặc trạng thái khác sẽ được lưu giữ.


Không chắc là máy khách X cục bộ sẽ mất kết nối với máy chủ X, đặc biệt là do nhấn phím. Giết Firefox sẽ không lưu thông tin về các cửa sổ ở chế độ duyệt web riêng tư.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi sử dụng Lazarus và (khi không sử dụng chế độ Duyệt web riêng tư để thử và chuyển đổi xung quanh tài khoản gmail chính của mình, để mở gdocs để xem / chỉnh sửa tài liệu bằng thông tin từ các trang web trong các tab liền kề, mà không đăng xuất khỏi tất cả các tài khoản gmail của tôi - Grr, Google) có FF "Ghi nhớ các cửa sổ và tab của tôi từ lần trước", vì vậy tôi chỉ quan tâm đến các tab đang mở trong chế độ Duyệt web riêng tư. Vì vậy, trong khi thật tốt khi biết lập luận trên kill, tôi nghi ngờ rằng FF sẽ lưu các tab của tôi trong tình huống này. Có cách nào để FF gắn lại vào X không?
user66001

"Có cách nào để FF gắn lại vào X không?" bởi vì tôi chưa bao giờ có thể tìm ra cách cửa sổ có thể bị hủy / hủy mà không có quá trình máy khách nhận được tín hiệu, tôi giả sử rằng ổ cắm từ chương trình FF đến UI vẫn mở. Chừng nào một quá trình được kết nối với một ổ cắm, tôi biết không có cách nào mà bất kỳ quá trình nào có thể chạm vào đó. (Bây giờ bạn đã khiến tôi phải suy nghĩ về nó, tôi nghi ngờ đây là lỗi giao thức giữa máy chủ X và máy khách cực kỳ khó khăn (nghĩa là tôi không bao giờ thử) để gỡ lỗi).
msw
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.