การอ้างอิงเอกสารทุบตี (จากman bash
):
JOB CONTROL
Job control refers to the ability to selectively stop
(suspend) the execution of processes and continue (resume)
their execution at a later point. A user typically employs
this facility via an interactive interface supplied jointly
by the operating system kernel's terminal driver and bash.
ดังนั้นพูดง่ายๆว่าการมีset -m
(ค่าเริ่มต้นสำหรับเชลล์แบบโต้ตอบ) อนุญาตให้ใช้บิวด์อินเช่นfg
และbg
ซึ่งจะถูกปิดการใช้งานภายใต้set +m
(ค่าเริ่มต้นสำหรับเชลล์ที่ไม่มีการโต้ตอบ)
ฉันไม่เห็นชัดเจนว่าการเชื่อมต่อระหว่างการควบคุมงานและการฆ่ากระบวนการพื้นหลังเมื่อออกคืออะไร แต่ฉันสามารถยืนยันได้ว่ามีอย่างใดอย่างหนึ่ง: การทำงานset -m; (sleep 10 ; touch control-on) &
จะสร้างไฟล์ถ้าใครออกจากเชลล์ทันทีหลังจากพิมพ์คำสั่งนั้น แต่set +m; (sleep 10 ; touch control-off) &
จะไม่
ฉันคิดว่าคำตอบนั้นอยู่ในเอกสารที่เหลือสำหรับset -m
:
-m Monitor mode. [...] Background pro‐
cesses run in a separate process group and a line con‐
taining their exit status is printed upon their comple‐
tion.
ซึ่งหมายความว่างานพื้นหลังที่เริ่มต้นภายใต้set +m
ไม่ใช่ "กระบวนการพื้นหลัง" ที่แท้จริง ("กระบวนการพื้นหลังเป็นงานที่ ID กลุ่มกระบวนการแตกต่างจากเทอร์มินัล"): พวกเขาแบ่งปัน ID กลุ่มกระบวนการเดียวกันกับเชลล์ที่เริ่มทำงาน กลุ่มกระบวนการเช่นกระบวนการพื้นหลังที่เหมาะสม สิ่งนี้จะอธิบายพฤติกรรมที่สังเกตได้เมื่อเชลล์หยุดทำงานก่อนที่งานแบ็คกราวน์บางส่วน: ถ้าฉันเข้าใจถูกต้องเมื่อออกจากงานสัญญาณจะถูกส่งไปยังกระบวนการในกลุ่มกระบวนการเดียวกันกับเชลล์ (ดังนั้นจึงฆ่างานพื้นหลังที่เริ่มต้นset +m
) ไปยังกลุ่มกระบวนการอื่น ๆ (ดังนั้นปล่อยให้กระบวนการพื้นหลังจริงเริ่มต้นภายใต้set -m
)
ดังนั้นในกรณีของคุณstartup.sh
สคริปต์น่าจะเริ่มงานพื้นหลัง เมื่อสคริปต์นี้ทำงานแบบไม่มีการโต้ตอบเช่นผ่าน SSH ดังเช่นในคำถามที่คุณเชื่อมโยงการควบคุมงานถูกปิดใช้งานงาน "แบ็คกราวน์" จะแบ่งปันกลุ่มกระบวนการของรีโมตเชลล์และจะถูกฆ่าทันทีที่เชลล์ออกจาก ในทางกลับกันเมื่อเปิดใช้งานการควบคุมงานในเชลล์นั้นงานแบ็คกราวน์จะได้รับกลุ่มกระบวนการของตัวเองและจะไม่ถูกฆ่าเมื่อเชลล์พาเรนต์ออก
tomcat/bin/startup.sh
เกี่ยวข้องกับfg
/bg
อย่างไร