Làm thế nào tôi có thể ngủ đông một ứng dụng đang chạy?


15

Trường hợp sử dụng ví dụ:

Tôi chạy Chromium với một vài tab đang mở và quyết định rằng tôi không cần truy cập ứng dụng trong 20 phút tiếp theo. Để tiết kiệm thời gian sử dụng pin của máy tính xách tay, tôi muốn ngủ đông (đóng băng) Chromium mà không phải đóng ứng dụng (mở lại và tải lại tất cả các tab cần có thời gian mà tôi muốn lưu bằng cách ngủ đông).


1
Kiểm tra câu trả lời thứ hai tại đây: stackoverflow.com/questions/2134771/ . Có một điều là crom đang sử dụng nhiều loại PID và mỗi loại khác nhau mỗi khi bạn mở nó ... nhưng việc dừng chính (biểu tượng có biểu tượng gốc trong trình quản lý quy trình) dường như hoạt động tốt.
GreggD

1
Nếu bạn chỉ quan tâm đến Chromium chứ không phải bất kỳ ứng dụng nào khác, bạn có thể sử dụng Tiện ích mở rộng Chromium được thiết kế để quản lý tab, chẳng hạn như OneTab hoặc Phiên Buddy .
Moshe Katz

Cảm ơn bạn nhưng tôi tìm thấy killallgiải pháp thực sự thanh lịch. :)
orschiro

Câu trả lời:


21

Bạn có thể sử dụng killalllệnh để gửi SIGSTOPtín hiệu đến tất cả các quy trình khớp với tên đã cho để đóng băng chúng và sau đó gửi SIGCONTcùng một cách để làm tan chúng một lần nữa.

Trước tiên hãy tìm tên quy trình bằng cách sử dụng pgrep -l SEARCH_PATTERN:

$ pgrep -l chrom
13010 chromium-browse
13036 chromium-browse
13038 chromium-browse
13153 chromium-browse
13166 chromium-browse
13169 chromium-browse
13175 chromium-browse
13187 chromium-browse
13195 chromium-browse
13206 chromium-browse

Lưu ý rằng nó sẽ cắt tên dài, do đó rthiếu. Nhưng đây không phải là vấn đề vì bạn có thể sử dụng Tabhoàn thành để nhập tên quy trình sẽ tự động hoàn thành.

Sau đó, bạn gửi SIGSTOPtín hiệu cho tất cả các quy trình có tên chromium-browsernhư thế này:

$ killall -s STOP chromium-browser 

Cửa sổ Chromium sẽ chuyển sang màu xám như thể nó không phản hồi. Chà, nó thực sự trở nên không phản hồi, vì vậy đó là điều được mong đợi. Bạn không thể tương tác với cửa sổ theo bất kỳ cách nào bây giờ (ngoại trừ thanh menu và thu nhỏ, v.v. được xử lý bởi trình quản lý cửa sổ chứ không phải chính ứng dụng). Nhưng các sự kiện từ các nút bấm, v.v. vẫn được tạo và thêm vào hàng đợi sự kiện của ứng dụng, vì vậy tất cả chúng sẽ được xử lý ngay lập tức khi bạn làm tan ứng dụng một lần nữa!

Bạn làm tan ứng dụng một lần nữa bằng cách chạy lệnh này để gửi SIGCONTtín hiệu đến các quy trình được chỉ định:

$ killall -s CONT chromium-browser 

Đôi khi đóng băng một ứng dụng theo cách này có thể khiến nó bị sập, vì vậy hãy đảm bảo rằng những thứ quan trọng được lưu trước khi đóng băng một ứng dụng.

Trong những trường hợp hiếm hoi, ngay cả môi trường máy tính để bàn / trình quản lý cửa sổ / bất cứ điều gì khác cũng có thể trở nên không phản hồi. Trong trường hợp này, bạn phải làm tan ứng dụng đã đóng băng thông qua TTY:

Nhấn Ctrl+ Alt+ F1để chuyển sang TTY1. Bạn sẽ được yêu cầu đăng nhập, vì vậy hãy nhập tên người dùng và mật khẩu của bạn. Sau đó chạy lệnh để làm tan ứng dụng giống như cách bạn chạy nó thông qua trình giả lập thiết bị đầu cuối bình thường. Sau đó, chuyển trở lại máy tính để bàn (TTY7) bằng cách sử dụng Ctrl+ Alt+ F7và bạn sẽ ổn trở lại.


4
Kể từ khi bạn bắt đầu pgrep, bạn có thể tiếp tục vớipkill
muru

1
Mặc dù nguy cơ ứng dụng bị sập từ SIGSTOPtồn tại, tôi sẽ nói nó là nhỏ. Tôi thường sử dụng nó trên Chromium và tôi không nhớ rằng đó là lý do gây ra sự cố.
kasperd

Tôi đã học smtg mới! killall! ;-)
Fabby

8

Để tạm dừng, hãy thử: killall -SIGTSTP chromium-browser

Nếu điều này không hoạt động, hãy thử phiên bản mạnh mẽ : killall -SIGSTOP chromium-browser.

Dù bằng cách nào, để tiếp tục sử dụng killall -SIGCONT chromium-browser. Tôi đã thử với Firefox và nó đã hoạt động. Tuy nhiên, xin lưu ý rằng nếu bạn nhấp vào các nút trong Chromium trong khi bị treo, nó sẽ thực thi nội dung đó sau khi bạn tiếp tục thực thi.


3
SIGSTOP / SIGCONT hoạt động với tôi, chỉ cần nhập chromium-browsertên quy trình. +1
GreggD

1
Hoặc google-chromenếu bạn sử dụng Google Chrome, vì sự khác biệt rõ ràng là khó hiểu
mèo

2

Bạn có thể thử cách sau (trong Terminal):

ps aux | grep gedit

Sau đó, bạn sẽ thấy một cái gì đó như thế này:

barend    7166  5.3  1.0 722620 39044 ?        Sl   16:19   0:00 gedit

Viết số 7166 (hoặc bất kể số nào) và sau đó làm:

kill -STOP 7166

Điều đó sẽ đình chỉ thực hiện quá trình. Nó sẽ không giải phóng ngay bộ nhớ được sử dụng bởi nó, nhưng bộ nhớ sẽ có sẵn cho các tiến trình khác nếu họ cần.

Sau đó làm

kill -CONT 7166 để làm việc với chương trình một lần nữa.

Lưu ý rằng bạn phải thay đổi 7166 khi thích hợp.

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.