หากคุณมีงานพื้นหน้าจริงๆแล้วทุบตีรอให้งานเสร็จนั่นคือคำจำกัดความของงานเบื้องหน้าไม่มากก็น้อย หากทุบตียังคงมีการควบคุมของเครื่องตรวจสอบสิ่งที่เกิดขึ้นjobs -l
เช่น:
$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1] 13404 Running ncat -kl -p 10111 &
[2]- 13405 Running ncat -kl -p 10222 &
[3]+ 13406 Running ncat -kl -p 10333 &
ฉันเริ่มncat
กระบวนการฟังพื้นหลังสามครั้งสำหรับสิ่งนี้ คุณอาจเห็น "เสร็จสิ้น" หรือ "หยุด" สำหรับสถานะงาน
คุณสามารถแบ็คกราวน์งานเบื้องหน้าได้อย่างมีประสิทธิภาพจากเชลล์ที่แตกต่างกันโดยใช้วิธีSIGSTOP / SIGCONT ของStefan Seidel (แม้ว่าสัญญาณจริงที่ส่งโดยเชลล์ด้วยCtrl- Zคือ SIGTSTP สัญญาณทั้งสองควรทำงาน)
มีความแตกต่างที่ละเอียดอ่อนระหว่างกระบวนการและงานเมื่อใช้ข้อกำหนดเบื้องหน้าและพื้นหลัง มีงานเบื้องหน้าเชลล์เพียงงานเดียวเท่านั้นสามารถมีกระบวนการทำงานเบื้องหน้าได้หลายรายการ(ซึ่งเกี่ยวข้องกับID กลุ่มกระบวนการเทอร์มินัลและสามารถสังเกตได้เมื่อคุณเริ่มกระบวนการสองกระบวนการขึ้นไปในไพพ์ไลน์)
กระบวนการทำงานหรือไปป์ไลน์ภายใต้การควบคุมของเชลล์เรียกว่า "งาน" เมื่อคุณใช้คำสั่งbg
หรือfg
คำสั่งคุณหมายถึงงานล่าสุดโดยนัย - ในกรณีของฉันงานที่มี+
ในข้างต้น งานเหล่านี้สามารถเรียกได้อย่างชัดเจนว่าเป็น% 1% 2 หรือ% 3 (ตัวเลข[]
)
fg
คำสั่งที่ไม่ผ่านการรับรองจะมีผลกับงานเดียวเท่านั้นซึ่งเป็นงานล่าสุดดังนั้นคุณอาจเข้าใจผิดเกี่ยวกับสถานการณ์ปัจจุบัน งานพื้นหลังอาจยังเขียนไปยังเทอร์มินัล:
echo foo > /dev/tcp/127.0.0.1/10111
มันขึ้นอยู่กับว่าโปรแกรมจัดการกับเทอร์มินัลncat
ทำงานได้ดีสำหรับการเขียน สำหรับการอ่านว่าโปรแกรมจะหยุดการทำงานและคุณจะเห็นข้อความ "หยุด" เชลล์จะเริ่มต้นกระบวนการและรอให้พวกเขาออกหรือรับสัญญาณ SIGTTIN ( nohup
เป็นวิธีแก้ไขปัญหานี้ตามที่เป็นอยู่disown
)
คุณสามารถแบ็คกราวน์งานที่หยุดทำงานเฉพาะด้วย
$ bg %3
(ในกรณีของฉันฉันจะได้รับข้อผิดพลาดbash: bg: job 3 already in background
)
มิฉะนั้นหากกระบวนการที่อยู่ในเบื้องหน้าเว้นแต่โปรแกรมจับ SIGTSTP และทำบางสิ่งที่พิเศษก็ไม่น่าจะมีปัญหากับการได้อย่างรวดเร็วCtrl- และZ bg
ไม่มีอะไรพิเศษเกี่ยวกับโปรแกรมเครือข่ายในแง่นี้การเชื่อมต่อ / ข้อมูลขาเข้าจะถูกบัฟเฟอร์โดยเคอร์เนล (มากถึงหนึ่งจุด) การเชื่อมต่อแบบสตรีมอาจมีการหยุดชั่วคราวที่สังเกตได้
ดูส่วน "การควบคุมงาน " ของหน้า bash man สำหรับรายละเอียดเพิ่มเติม