Di chuyển quy trình đã chạy sang Màn hình


222

Công việc văn phòng của tôi thường xuyên thấy tôi kết nối với một hộp Linux thông qua VNC.

Đôi khi tôi bắt đầu một công việc từ xa trên bàn điều khiển và sau đó nhận ra rằng nó chạy lâu hơn dự kiến. (Đáng lẽ phải bắt đầu cái đó dưới Màn hình ở nơi đầu tiên ...)

Tôi không muốn giữ cho máy trạm của mình chạy qua đêm chỉ để giữ phiên VNC mở; Tôi muốn chuyển công việc từ xa đã chạy đó thành một phiên Màn hình (trên hộp từ xa), để tôi có thể tắt nguồn máy trạm (và kết nối lại vào sáng hôm sau).

Làm thế nào điều này có thể được thực hiện, nếu ở tất cả?


2
và đó là bản dupe, serverfault.com/questions/49877/ , - dường như không thể thực hiện được.
Paul Dixon



3
Bản sao có thể có
scai

Tìm kiếm kịch bản sàng lọc.
Vashu

Câu trả lời:


217

Có một cái nhìn tại reptyr , mà chính xác đó. Trang github có tất cả các thông tin.

reptyr - Một công cụ cho các chương trình "ptying".

reptyr là một tiện ích để lấy một chương trình đang chạy và gắn nó vào một thiết bị đầu cuối mới. Bắt đầu một quá trình dài qua ssh, nhưng phải rời đi và không muốn làm gián đoạn nó? Chỉ cần khởi động một màn hình, sử dụng reptyr để lấy nó, sau đó giết phiên ssh và về nhà.

SỬ DỤNG

reptyr PID

"Reptyr PID" sẽ lấy quy trình với id PID và gắn nó vào thiết bị đầu cuối hiện tại của bạn.

Sau khi đính kèm, quá trình sẽ lấy đầu vào từ và ghi đầu ra vào thiết bị đầu cuối mới, bao gồm ^ C và ^ Z. (Thật không may, nếu bạn chạy nền, bạn vẫn sẽ phải chạy "bg" hoặc "fg" trong thiết bị đầu cuối cũ. Điều này có thể không thể khắc phục một cách hợp lý mà không cần vá vỏ của bạn.)


22
Nếu, giống như tôi, bạn đã xem liên kết ở trên và xem xét ngắn gọn việc cài đặt chương trình từ nguồn, xin lưu ý: đó chỉ là một apt-gethệ thống Debian.
mlissner

3
Điều này làm việc tuyệt vời, làm thế nào tôi chưa thấy điều này trước đây?
deed02392

3
Điều này thật tuyệt! Tôi sẽ nâng nó lên 10 lần nếu tôi có thể! Ngoài ra, reptyr cũng có sẵn trong repos RedHat. Chỉ cần 'yum cài đặt' để có được nó.
Mark J. Bobak

5
Không hoạt động ngoại trừ trong các trường hợp tầm thường nhất:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad

2
Ít nhất là root, bạn có thể sử dụngreptyr -T PID
ChristophK

45

Bạn không thể làm điều này, một cách dễ dàng. Tôi khuyên bạn nên tạo thói quen bắt đầu màn hình như là điều đầu tiên bạn làm sau khi mở giao diện điều khiển.

Tuy nhiên, đối với vấn đề thực tế của bạn, có một điều khác bạn có thể thử: sau khi đã khởi động công việc của mình từ thiết bị đầu cuối, hãy làm nền bằng cách nhập ctrl-z và sau đó bg. Sau đó, tách công việc ra khỏi vỏ cha mẹ; trong bash bạn sẽ làm disown -h %<jobid>. Sau đó, bạn có thể đóng thiết bị đầu cuối một cách an toàn và công việc sẽ tiếp tục chạy.


3
Điều này làm việc rất tốt cho trường hợp của tôi. reptyr và retty đều thất bại trong việc lấy quy trình, nhưng tất cả những gì tôi cần là có thể đóng một thiết bị đầu cuối và rời khỏi quy trình để chạy.
STW

10
FYI: sau khi từ chối quá trình, nó có thể được lặp lại trong màn hình .
Adam

1
Điều này đã giết chết chương trình đang chạy của tôi :(
Mehrdad

39

Khi bạn đang sử dụng Linux, còn việc sử dụng retty trong quy trình màn hình mới ra mắt thì sao?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

chúc mừng


1
Không biết retty, cảm ơn. Tuy nhiên, đối với loại công việc dài hạn mà tôi có trong đầu, tôi hơi miễn cưỡng khi sử dụng một công cụ gọi là "thử nghiệm rất nhẹ". Tôi đi với giải pháp của bá tước.

1
không thấy bất cứ điều gì ở Gentoo
Sergei

không thể đính kèm với 4858
Arnold Roa
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.