Tại sao các quá trình nền đôi khi dừng lại tự phát?


10

Đôi khi, một thời gian sau khi tôi đã tạo nền cho một quá trình bgtrong bash, khi tôi nhấn Enter trong cùng một vỏ để hiển thị lại lời nhắc (chỉ để kiểm tra xem tôi vẫn còn bash khi một số đầu ra từ quá trình nền đã được hiển thị), quá trình nền dường như dừng lại một cách tự nhiên.

Nếu tôi làm bglại vấn đề tương tự tái diễn.

Cách duy nhất để khắc phục nó dường như là fg.

Lý do tại sao điều này xảy ra?


Sản lượng của bạn đi đâu? Bạn đang điền vào một bộ đệm ở đâu đó?
Paul Tomblin

Câu trả lời:


12

Điều này thường xảy ra nếu quá trình cố gắng đọc từ stdinluồng của nó . Khi quá trình ở chế độ nền, nó sẽ nhận được tín hiệu TTIN và do đó bị đóng băng (hoạt động tương tự như tín hiệu STOP). Ngoài ra còn có tín hiệu kép TTOU khi một quá trình nền cố gắng ghi vào thiết bị đầu cuối của nó.

Đưa nó lên nền trước sẽ tiếp tục quá trình và cho phép nó đọc từ thiết bị đầu cuối của bạn.

Bản giới thiệu:

$ cat t.sh
#! /bin/sh
sleep 1
read dummy
$ ./t.sh &
[1] 3364
$ 
[1]+  Stopped                 ./t.sh
$ ps aux|grep t.sh
me  3364  0.0  0.0  11268  1200 pts/0    T    17:04   0:00 /bin/sh ./t.sh

Một trong những cách để tránh điều này là sử dụng nohup, nhưng điều này có thể có những hiệu ứng lạ nếu chương trình không xử lý được luồng đầu vào của nó được chuyển hướng đến /dev/null.

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.