Làm thế nào tôi có thể di chuyển một quá trình vào nền và cũng làm im lặng đầu ra của nó?


11

Nói rằng tôi bắt đầu một quá trình trong thiết bị đầu cuối và nó gửi đầu ra đến lỗi tiêu chuẩn trong khi nó chạy. Tôi muốn chuyển quá trình vào nền và đồng thời im lặng nó.

Có cách nào để làm điều này mà không dừng quá trình và bắt đầu lại bằng cách sử dụng &> /dev/null 2>&1không? Tôi tự hỏi nếu có một số lệnh thực hiện bg và có thể thay đổi các mô tả đầu ra của quá trình đích.

Câu trả lời:


9

Quá muộn. Sau một quá trình được bắt đầu, vỏ không có người kiểm soát nhiều hơn về quá trình mô tả tập tin nên bạn không thể im lặng nó bằng một lệnh shell.

Bạn chỉ có thể cố gắng để giết một SIGHUPquá trình. Nếu quy trình của bạn xử lý chính xác , nó sẽ tách ra khỏi việc kiểm soát tty . Thật không may, nhiều phần mềm không xử lý chính xác và đơn giản là chết.


bạn không thể làm CTRL + Z để đặt quá trình ở chế độ nền? nó không làm im lặng quá trình và nếu bạn đăng xuất, tôi nghĩ nó cũng sẽ giết quá trình.
Roy Rico

1
@RoyRico, giết một SIGSTOPquá trình (hoặc như bạn nói khi thực hiện CTRL + Z ) không làm im lặng một quy trình. Nó dừng một quá trình!
andcoz

5

Quá trình được chạy từ một thiết bị đầu cuối có stdin, stdout và stderr liên kết với thiết bị đầu cuối và bạn không thể làm bất cứ điều gì về nó mà không giành lại quyền kiểm soát thiết bị đầu cuối đó ... Thông thường. Nhưng có một số công cụ phức tạp thực sự cho phép bạn làm điều đó. Hãy xem ví dụ này . Và các chương trình khác như rettyđã đề cập ở đó.


3

Tôi không đồng ý với andcoz rằng đã quá muộn để tắt tiếng đầu ra.

Giả sử quy trình đang chạy ở nền trước, hãy sử dụng Ctrl-Zđể tạm dừng quá trình. Làm như vậy sẽ báo cáo số công việc và ID quy trình. Bạn có thể tiếp tục và di chuyển quy trình sang nền bằng cách sử dụng bg %1(cho công việc số 1). Mặc dù điều này chuyển quá trình sang nền, nhưng nó không làm im lặng đầu ra. Để tắt đầu ra, bạn có thể sử dụng gdbđể chuyển hướng tất cả đầu ra /dev/null.

Điều này đã được mô tả rất độc đáo trước đây tại /programming/593724/redirect-stderr-stdout-of-a- process-after-it-been-started-USE-andand-lin / 593764 # 593764 .


0

Một công cụ dòng lệnh khác là detach. Phiên bản mới nhất hỗ trợ viết pidfiles, sử dụng các tệp cho stdin, stdout và stderr và chạy ở nền trước. (Trang web của detachcũng thảo luận về các công cụ tương tự.)

http://inglorion.net/software/detach/

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.