Reptyr - Di chuyển các quy trình sang một vỏ màn hình khác [Linux]
Trong Linux, trong khi chạy một quá trình cần một thời gian dài để chạy, nó có thể là một nỗi đau để chấm dứt nó nửa chừng bởi vì bạn đã hết thời gian, hoặc bởi vì bạn cần phải về nhà. Nếu bạn đã từng gặp phải một tình huống như thế này trước đây, thì bạn thực sự cần phải có được công cụ Reptyr.
Reptyr là gì?
Công cụ Reptyr là một tiện ích dòng lệnh có một tiến trình đang chạy từ một thiết bị đầu cuối và di chuyển nó sang một thiết bị đầu cuối khác. Nói cách khác, nó lặp lại một quá trình. Cái tên này cũng gợi nhớ đến một giả - thường được viết tắt là "PTY". Một giả, nếu bạn không biết, là một công cụ cho phép hai quá trình (một master và slave) được liên kết với nhau. Những gì bạn viết trên một được phản ánh trong khác.
Reptyr hoạt động như thế nào?
Với Reptyr, bạn có thể bắt đầu một quá trình tại nơi làm việc và hoàn thành nó ở nhà (nếu bạn đang sử dụng SSH). Có các công cụ khác tương tự như công cụ Reptyr, như Screenify và Retty, và bạn có thể đã gặp chúng trước đây. Tuy nhiên, Reptry đã chứng minh được tốt hơn so với đối thủ cạnh tranh của nó tại thời điểm này. Nó có ít lỗi hơn và hiệu quả hơn rất nhiều. Vấn đề với các công cụ khác này là thiết bị đầu cuối điều khiển của quy trình không thay đổi ngay cả khi quá trình được di chuyển. Ví dụ: nếu bạn sử dụng Screenify và thử sử dụng lệnh “^ c” hoặc “^ z” trên thiết bị đầu cuối mới, chúng sẽ không hoạt động chính xác. Điều này là do chúng được thực hiện trên thiết bị đầu cuối có điều khiển tại thời điểm này. Nếu bạn thay đổi kích thước cửa sổ chương trình hoặc thử lệnh “ less
” less
, nó không hoạt động chính xác, vì Linux bị lừa khi nghĩ rằng bạn vẫn đang hoạt động trên thiết bị đầu cuối cũ.
Vậy làm thế nào để Reptyr hoạt động chính xác? Nó nhắm vào quá trình chúng ta đang tìm cách di chuyển bằng cách sử dụng API ptrace, mở ra một thiết bị đầu cuối mới và sử dụng “dup2” để ghi đè lên các mô tả tệp cũ. Reptyr cũng khác với các quy trình khác ở chỗ nó thay đổi thiết bị đầu cuối điều khiển. Bạn có thể kiểm tra blog chính thức để có được các chi tiết nhưng về cơ bản nó liên quan đến việc thao tác các tính năng ioctl, TIOCSCTTY trong Linux để thay đổi quá trình kiểm soát.
Cài đặt
Trong bản phân phối dựa trên Ubuntu, bạn có thể sử dụng apt-get để cài đặt ứng dụng:
sudo apt-get cài đặt reptyr
Di chuyển một quá trình sang màn hình mới với Reptyr
Bạn cũng có thể sử dụng Reptyr, cùng với ứng dụng phần mềm GNU Screen (hoặc một ứng dụng ghép kênh thiết bị đầu cuối tương tự), để chuyển quy trình của bạn sang phiên màn hình mới. Ví dụ, nếu bạn có một tiến trình đang chạy và cần phải khởi động lại máy chủ của bạn, bạn có thể chuyển nó sang một phiên màn hình mới để bạn có thể truy cập lại nó sau khi hệ thống khởi động lại. Âm thanh hữu ích, phải không? Vậy làm thế nào để bạn làm điều đó một cách chính xác?
Trước tiên, bạn cần phải tạm dừng quá trình mà bạn cần di chuyển. Điều đó có thể được thực hiện theo nhiều cách khác nhau - tất cả phụ thuộc vào quá trình bạn đang chạy (chủ yếu là "^ z" hoạt động). Sau đó, sau khi bạn đã tạm ngưng, bạn cần phải tiếp tục quá trình trong nền. Lệnh cho điều này, là bạn không biết, là,
bg
Tiếp theo, bạn sẽ cần phải cô lập quá trình con từ quá trình cha mẹ. Điều này là do quá trình cha mẹ sẽ bị chấm dứt trong khi khởi động lại, và bạn cần phải giữ cho quá trình đó xảy ra với tiến trình con. Để làm điều đó, sử dụng lệnh disown:
disame name_of_process
Sau đó, bạn sẽ phải khởi chạy ứng dụng phần mềm màn hình. Nó thực sự là một công cụ khá tiện dụng - thật dễ dàng để tải xuống, nếu bạn không có nó. Bạn khởi chạy nó bằng lệnh sau:
màn
Và bây giờ bạn cần truy xuất quy trình bạn đang cố di chuyển. Xin lưu ý rằng bạn cần PID của tiến trình đang chạy cho lệnh này. Ngoài ra, bạn có thể sử dụng lệnh " pgrep
". Nếu bạn biết PID, hãy gõ:
reptyr PID
Nếu bạn không biết PID:
reptyr $ (pgrep name_of_process)
Và bạn đã hoàn tất! Giờ đây, bạn có thể đăng xuất khỏi phiên của mình mà không phải giết quá trình.
Tóm tắt
$ ctrl + z # Tạm ngưng quá trình hiện tại $ disown# Gỡ bỏ quá trình từ màn hình shell $ # Khởi động màn hình $ reptyr $ (pgrep irssi) # Lấy lại quy trình
Reptyr là mã nguồn mở và hoàn toàn miễn phí. Thật dễ dàng để thiết lập và sử dụng, vì vậy hãy tiếp tục và thử. Chắc chắn bạn sẽ thấy nó khá tiện dụng.
Tín dụng hình ảnh: Techiezone, Mtellin @ Flickr