Mengapa proses yang berlatar belakang terkadang berhenti secara spontan?

10

Kadang-kadang, beberapa saat setelah saya melatar belakangi sebuah proses dengan bgdi bash, ketika saya menekan Enter di shell yang sama untuk menampilkan kembali prompt (hanya untuk memeriksa bahwa saya masih di bash ketika beberapa output dari proses latar belakang telah ditampilkan), proses latar belakang tampaknya berhenti secara spontan.

Jika saya lakukan bglagi masalah yang sama berulang.

Satu-satunya cara untuk memperbaikinya tampaknya fg.

Mengapa ini terjadi?

Robin Green
sumber
Kemana perginya output Anda? Apakah Anda mengisi buffer di suatu tempat?
Paul Tomblin

Jawaban:

12

Ini biasanya terjadi jika proses mencoba membaca dari stdinalirannya. Ketika proses di latar belakang, ia menerima sinyal TTIN dan dengan demikian dibekukan (perilaku yang sama seperti sinyal STOP). Ada juga TTOU sinyal ganda ketika proses latar belakang mencoba untuk menulis ke terminalnya.

Membawanya ke latar depan melanjutkan proses dan memungkinkannya untuk membaca dari terminal Anda.

Demo:

$ 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

Salah satu cara untuk menghindari ini adalah dengan menggunakan nohup, tetapi ini dapat memiliki efek aneh jika program tidak berurusan dengan aliran input yang dialihkan ke /dev/null.

Tikar
sumber