Có thể đọc đầu ra từ bất kỳ quá trình nào bằng cách sử dụng PID của nó không?


32

Có thể gắn thiết bị đầu cuối vào một quy trình đã chạy bằng cách sử dụng PID của nó theo cách tương tự như sử dụng fglệnh cho công việc không?


như thế nào?! quá trình bạn muốn đính kèm là gì?!

Tôi muốn có thể xem đầu ra của một chương trình đã được bắt đầu trong một thiết bị đầu cuối khác
Tommy

Câu trả lời:


43

Bạn có thể lấy mô tả tệp tiêu chuẩn của quy trình đó, vd stdout:

tail -f /proc/<pid>/fd/1

8
Tôi đã thử giải pháp này với đầu và nó dường như không hoạt động. Trong một thiết bị đầu cuối, tôi đã khởi chạy top và trong một thiết bị khác, tôi đã sử dụng lệnh của bạn với pid đã sửa nhưng không có đầu ra.
Tommy

1
Làm thế nào để bạn làm điều này trên máy mac?
Avner Barr

còn stderr thì sao? Tôi giả sử / Proc / <pid> / fd / 2, nhưng làm thế nào để bạn có được cả stdout / stderr?
Alexander Mills

1
Điều gì nếu mô tả này trỏ đến một ổ cắm? Đuôi không thể đọc nó. # ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Imaskar nói Phục hồi lại

8

Có một vài lựa chọn ở đây. Một là chuyển hướng đầu ra của lệnh sang một tệp, sau đó sử dụng tailđể xem các dòng mới được thêm vào tệp đó trong thời gian thực.

Một tùy chọn khác là khởi chạy chương trình của bạn bên trong screen, đó là một loại ứng dụng đầu cuối dựa trên văn bản. Các phiên màn hình có thể được đính kèm và tách rời, nhưng trên danh nghĩa chỉ được sử dụng cho cùng một người dùng, vì vậy nếu bạn muốn chia sẻ chúng giữa những người dùng.

Khác nếu bạn muốn bạn có thể theo dõi quá trình và xem những gì nó đang làm với strace:

strace -e trace=open -p 22254 -s 80 -o output.txt
  • -p PID: Đính kèm quy trình với quy trình ID ID quy trình và bắt đầu truy tìm.
  • -s SIZE: Chỉ định kích thước chuỗi tối đa để in (mặc định là 32).
  • -o filename: Viết đầu ra theo dõi vào tên tệp của tệp chứ không phải để sàng lọc (stderr).

Cuối cùng, nó dường như không hoạt động. Tôi đã khởi chạy top và trong một lần khác, tôi đã sử dụng lệnh của bạn với pid đã sửa nhưng không nhận được kết quả mong đợi. Khi tôi sử dụng đuôi sau đó.
Tommy

Bạn cần sử dụng sudovới strace để đính kèm vào một quy trình và sử dụng -o ~/output.txtđể tập tin được để lại trong thư mục nhà của bạn.

Sử dụng tập tin đầu ra, không gửi đến màn hình! Đừng là một thằng ngốc như tôi và nhấn Ctrl-C để thoát khỏi bước đi và sau đó tách ra PID của tôi. Sợ chết tiệt tôi trên một kịch bản quan trọng.
Weston Ganger

3

Bạn có thể sử dụng các lệnh được đưa ra dưới đây để đính kèm một quy trình đang chạy trên một thiết bị đầu cuối khác:

  • retty(Trang nam: retty )
  • reptyr
  • screen

Thí dụ:

screen -S PID
retty $(pgrep PID)
reptyr PID

Tôi đã không thể tìm thấy retty hoặc bò sát. Ngoài ra, để có thể sử dụng màn hình, tôi phải khởi chạy quy trình ban đầu với nó để nó không giải quyết được vấn đề của tôi.
Tommy

bạn có thể cài đặt nó bằng lệnh sudo apt-get install rettynhưng có một vài hạn chế với retty. Kiểm tra trang người đàn ông được đề cập trong câu trả lời.
devav2
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.