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