บน Linux ฉันสามารถให้โปรแกรมทำงานในพื้นหลังแม้หลังจากที่ฉันยกเลิกการเชื่อมต่อแล้ว?


4

หากฉันลงชื่อเข้าใช้เครื่อง Linux ระยะไกลฉันรู้ว่าฉันสามารถระงับกระบวนการ (cntr-z) และย้ายไปยังพื้นหลัง (bg 1) แต่ถ้าฉันยกเลิกการเชื่อมต่อจากเครื่องกระบวนการจะหยุดลง

มีวิธีที่ฉันสามารถทิ้งไว้ในพื้นหลังและมีมันเมื่อฉันกลับเข้าสู่ระบบ? นี่เป็นกระบวนการที่ใช้เวลานานมาก

บน Ubuntu ให้ลงชื่อเข้าใช้ผ่าน SSH

คำตอบ:


9

นี่เป็นเพราะโปรแกรมของคุณต้องการใช้งานเทอร์มินัลคุณสามารถใช้หน้าจอ GNUเพื่อสร้างเทอร์มินัลเสมือนเพื่อให้โปรแกรมทำงานต่อไปแม้หลังจากที่คุณยกเลิกการเชื่อมต่อ
เพียงแค่เรียกใช้screen your_program_nameคุณสามารถปิดหน้าจอด้วยcrtl-a-dแล้วเปิดอีกครั้งในภายหลังด้วยscreen -rx


หวังว่าฉันจะยอมรับคำตอบของคุณ แต่ฉันโพสต์โดยไม่ต้องเข้าสู่ระบบและตอนนี้ไม่สามารถเรียกร้องคำถามได้ = x แต่ขอบคุณที่ทำงานได้อย่างสมบูรณ์แบบ
Erik

6

มีความยืดหยุ่นน้อยกว่าหน้าจอและnohupdisown

nohup เป็นโปรแกรมและคุณจะต้องเริ่ม jub ที่ใช้เวลานานด้วยเช่นนี้:

$ nohup longjob --options-for-longjob

มันจะทำให้งานที่ยาวนานของคุณทำงานในพื้นหลังและไม่ได้เชื่อมต่อกับเทอร์มินัลใด ๆ (ซึ่งหมายความว่าคุณจะไม่ได้รับผลลัพธ์จากมันบนหน้าจอและจะไม่สามารถป้อนข้อมูลโดยตรงจากคีย์บอร์ด)

disownเป็น bash ในตัวที่สามารถยกเลิกการเชื่อมต่อกับงานที่ใช้เวลานานหลังจากที่คุณเริ่มต้นแล้ว หน้าคนทุบตีของฉันบอกว่า

disown [-ar] [-h] [jobspec ... ]
หากไม่มีตัวเลือก jobspec แต่ละรายการจะถูกลบออกจากตารางของงานที่กำลังทำงานอยู่ หากกำหนดตัวเลือก -h แต่ละงานจะไม่ถูกลบออกจากตาราง แต่ทำเครื่องหมายเพื่อให้ SIGHUP ไม่ได้ถูกส่งไปยังงานหากเชลล์ได้รับ SIGHUP หากไม่มี jobspec และไม่มีการจัดหาอ็อพชัน -a หรือ -r งานปัจจุบันจะถูกใช้ หากไม่มีการระบุ jobspec ตัวเลือก -a หมายถึงการลบหรือทำเครื่องหมายงานทั้งหมด อ็อพชัน -r โดยไม่มีอาร์กิวเมนต์ job-spec จำกัด การดำเนินการกับการรันงาน ค่าส่งคืนคือ 0 เว้นแต่ jobspec ไม่ได้ระบุงานที่ถูกต้อง

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