เหตุใดบางโปรแกรมที่เรียกใช้จากเทอร์มินัลโดยใช้ '&' ปิดเมื่อเทอร์มินัลและอื่น ๆ ไม่ทำ


27

ฉันแค่สงสัยเช่นเมื่อฉันเปิดตัวqtoxด้วย:

qtox &

จากนั้นปิดเทอร์มินัลqtoxปิดด้วย อย่างไรก็ตามเมื่อใช้งานetherape:

sudo etherape &

การปิด Terminal ไม่ได้ปิดหรือก่อให้เกิดปัญหาใด ๆ กับ Etherape และในแอปพลิเคชั่นที่แตกต่างกันนั้นมีพฤติกรรมที่แตกต่างกันบ้างเมื่อใกล้เทอร์มินัลคนอื่น ๆ จะทำไม่ได้ ทำไมบางคนถึงสนิทเมื่อคนอื่นไม่ทำ ฉันใช้ Ubuntu GNOME 15.10 กับ GNOME 3.18


1
เป็นไปได้ไหมที่คุณเปิดเทอร์มินัลคุณเรียกใช้ qtox ปิดเทอร์มินัลทุกคน !! แต่อันที่สองไปที่คุณเปิดเทอร์มินัล sudo รัน etherape ตอนนี้คุณปิดเทอร์มินัลแล้ว แต่ sudo ยังคงทำงานต่อไปจนกว่า sudo จะปิด?
Ken Mollerup

ถ้าคุณไม่ต้องการqtoxออกเมื่อคุณปิดเทอร์มินัลคุณก็สามารถรันมันได้nohup qtox &เสมอ
Terrance

@Terrance: ดีในคำถามนี้ฉันถูกถามโดยเฉพาะว่าทำไมไม่อย่างไร ... นั่นจะเป็นคำถามอื่น ๆ ของฉัน ... :)

1
@ParanoidPanda อ่าจุดดี ความผิดฉันเอง. =)
Terrance

คำตอบ:


36

เมื่อคุณปิดเทอร์มินัลเทอร์มินัลจะส่งสัญญาณ SIGHUP ไปยังเชลล์ เชลล์ในทางกลับกันส่งสัญญาณ SIGHUP ไปยังกลุ่มกระบวนการลูกทั้งหมดของมันซึ่งรวมถึงกลุ่มกระบวนการพื้นหลัง;

แต่ละกระบวนการจะตอบสนองต่อสัญญาณอย่างไรกับกระบวนการทั้งหมด: หากกระบวนการไม่ได้กำหนดตัวจัดการสำหรับสัญญาณและบอกเคอร์เนล (ผ่าน syscall บางอย่างเช่นsignal()หรือsigaction()) ที่ต้องการจัดการมันเคอร์เนลจะดำเนินการ ตัวจัดการเริ่มต้นสำหรับสัญญาณซึ่งในกรณีของสัญญาณ SIGHUP ประกอบด้วยในการยกเลิกกระบวนการ

อย่างไรก็ตามเมื่อคุณรันคำสั่งด้วยsudoUID ของsudoกระบวนการและกระบวนการลูกของมันถูกตั้งค่าเป็น0(root); โดยทั่วไปเว้นแต่ UID ของกระบวนการส่งสัญญาณคือ0(root) หรือเหมือนกับกระบวนการเป้าหมายเคอร์เนลจะยกเลิกสัญญาณ (เช่น: กระบวนการไม่สามารถส่งสัญญาณไปยังกระบวนการที่เป็นของผู้ใช้รายอื่นยกเว้นกระบวนการ การส่งสัญญาณเป็นของ root); นั่นเป็นเหตุผลที่เป็นกระบวนการที่ใช้เรียกเช่นทุบตีเช่นวิ่งโดย terminal ไม่สามารถ SIGHUP กระบวนการและในที่สุดปิดสถานีไม่ได้ส่งผลกระทบต่อกระบวนการที่เริ่มต้นด้วยsudosudo


7
และนั่นคือเหตุผลที่เราต้องการnohupคำสั่งเหล่านั้นที่ใกล้เคียงกับ SIGHUP :) Upgoated
Sergiy Kolodyazhnyy

9
ผมคิดว่าsudoมีความมหัศจรรย์อะไรเกี่ยวกับ sudoเพียงแค่รันคำสั่งในฐานะผู้ใช้รายอื่นและคุณไม่สามารถส่งสัญญาณไปยังกระบวนการของผู้ใช้รายอื่นได้ man 2 killดู
el.pescado

@ el.pescado เป็นsudoคนจนชนิดnohupไหน
Hagen von Eitzen

7
@HagenvonEitzen หากคุณต้องการ แต่ฉันขอละเว้นจากการใช้คำสั่งที่ไม่จำเป็นต้องsudoมีsudoสำหรับnohupผลข้างเคียงการพิจารณาทุกข้อเสียอื่น ๆ
คอส

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