การถามสิ่งนี้หลังจากการสนทนากับเพื่อนร่วมงานเป็นเวลานานฉันต้องการคำอธิบายที่นี่จริงๆ
ฉันเรียกใช้กระบวนการพื้นหลังโดยการต่อท้าย " &" ไปยังบรรทัดคำสั่งหรือโดยการหยุดCTRL-Zและกลับมาทำงานต่อในพื้นหลังด้วย " bg" จากนั้นฉันออกจากระบบ
เกิดอะไรขึ้น?
เราค่อนข้างแน่ใจว่ามันควรถูกสังหารโดย SIGHUP แต่สิ่งนี้ไม่ได้เกิดขึ้น เมื่อเข้าสู่ระบบอีกครั้งเป็นกระบวนการที่มีความสุขการทำงานและpstreeแสดงให้เห็นว่ามันเป็น "ลูกบุญธรรม" initโดย
นี่เป็นพฤติกรรมที่คาดหวังหรือไม่?
แต่ถ้าเป็นเช่นนั้นแล้วอะไรnohupคือวัตถุประสงค์ของคำสั่ง? ดูเหมือนว่ากระบวนการจะไม่ถูกฆ่าอย่างไรก็ตามมีหรือไม่มี ...
แก้ไข 1
รายละเอียดเพิ่มเติมบางส่วน:
- คำสั่งถูกเรียกใช้จากเซสชัน SSH ไม่ใช่จากฟิสิคัลคอนโซล
- คำสั่งถูกเรียกใช้โดยไม่มี
nohupและ / หรือ&; มันถูกระงับแล้วด้วยและกลับมาในพื้นหลังด้วยCTRL-Zbg - เซสชัน ssh ไม่ได้ลดลง มีการออกจากระบบจริง (
exitคำสั่ง "") - กระบวนการนี้เป็นการ
scpดำเนินการคัดลอกไฟล์ - เมื่อเข้าสู่ระบบอีกครั้งแสดงให้เห็นกระบวนการทำงานและเป็นลูกของ
pstreeinit
แก้ไข 2
หากต้องการระบุคำถามให้ชัดเจนยิ่งขึ้น: การวางกระบวนการในพื้นหลัง (โดยใช้&หรือbg) ทำให้ละเว้นSIGHUPเช่นเดียวกับnohupคำสั่งใช่หรือไม่
แก้ไข 3
ฉันลองส่งด้วยตนเองSIGHUPไปที่scp: มันออกแล้วดังนั้นจะไม่เพิกเฉยต่อสัญญาณแน่นอน
จากนั้นฉันลองเปิดตัวอีกครั้งวางไว้ในพื้นหลังและออกจากระบบ: มัน "รับ" initและดำเนินการต่อและฉันพบว่ามีเมื่อเข้าสู่ระบบกลับ
ตอนนี้ฉันค่อนข้างงงแล้ว ดูเหมือนว่าไม่มีSIGHUPการส่งการออกจากระบบ upong ทั้งหมด
1>/dev/null 2>&1ทุบตี ฯลฯ หรือไม่?