ทำไมบางครั้งกระบวนการที่มีพื้นหลังจึงหยุดทำงานเอง?


10

บางครั้งบางครั้งหลังจากที่ฉันแบ็คกราวน์กระบวนการด้วยbgใน bash เมื่อฉันกด Enter ในเชลล์เดียวกันเพื่อแสดงพร้อมท์อีกครั้ง (เพื่อตรวจสอบว่าฉันยังอยู่ใน bash เมื่อแสดงผลลัพธ์บางส่วนจากกระบวนการพื้นหลัง) กระบวนการพื้นหลังดูเหมือนว่าจะหยุดเอง

ถ้าฉันทำbgอีกครั้งปัญหาเดียวกันจะเกิดขึ้นอีก

fgวิธีเดียวที่จะแก้ไขมันน่าจะเป็น

ทำไมสิ่งนี้ถึงเกิดขึ้น


ผลผลิตของคุณไปอยู่ที่ไหน คุณกำลังเติมบัฟเฟอร์อยู่ที่ไหนสักแห่ง?
พอลทอมบลิน

คำตอบ:


12

ซึ่งมักจะเกิดขึ้นหากกระบวนการพยายามอ่านจากstdinสตรีม เมื่อกระบวนการอยู่ในพื้นหลังก็จะได้รับสัญญาณ TTINและถูกแช่แข็ง (พฤติกรรมเช่นเดียวกับสัญญาณ STOP) นอกจากนี้ยังมีสัญญาณคู่TTOUเมื่อกระบวนการส่วนหลังพยายามเขียนลงในเทอร์มินัล

นำไปที่เบื้องหน้าดำเนินการต่อกระบวนการและอนุญาตให้อ่านจากเครื่องของคุณ

การสาธิต:

$ 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

หนึ่งในวิธีการหลีกเลี่ยงการนี้คือการใช้แต่อาจมีผลกระทบแปลกถ้าโปรแกรมไม่ได้จัดการกับมีการสตรีมใส่มันเปลี่ยนเส้นทางไปยังnohup/dev/null

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.