บางครั้งฉันลืมรันโปรแกรมภายใต้หน้าจอและไม่สามารถหยุดกลางโปรแกรมได้และฉันรู้ว่ามันใช้เวลานาน
มีวิธีในการกลั่นกรองกระบวนการที่กำลังทำงานอยู่โดยไม่ต้องเริ่มต้นใหม่หรือไม่?
บางครั้งฉันลืมรันโปรแกรมภายใต้หน้าจอและไม่สามารถหยุดกลางโปรแกรมได้และฉันรู้ว่ามันใช้เวลานาน
มีวิธีในการกลั่นกรองกระบวนการที่กำลังทำงานอยู่โดยไม่ต้องเริ่มต้นใหม่หรือไม่?
คำตอบ:
พบคำตอบนี้ใน serverfault จากearl :
อย่างไรก็ตามสำหรับปัญหาที่เกิดขึ้นจริงของคุณมีอีกสิ่งหนึ่งที่คุณอาจลอง: หลังจากที่มีการเปิดตัวงานของคุณจากสถานีพื้นหลังได้โดยการพิมพ์ctrl- แล้วz หลังจากนั้นแยกออกจากงานมันเปลือกแม่ - ใน: หลังจากนั้นคุณสามารถปิดเครื่องได้อย่างปลอดภัยและงานจะยังคงทำงานต่อไป
bg
bash
disown -h %<jobid>
และคำถามนี้จากคำถามเดียวกันจากRob Wells :
$ screen -S my_process
$ retty $(pgrep my_process)
/redraw
วิธีแก้ไขปัญหาอื่นที่ไม่พบในโพสต์นั้นคือการใช้rettyหลังจากเริ่มเซสชันหน้าจอ
ดูreptyrซึ่งทำอย่างนั้น หน้า GitHub มีข้อมูลทั้งหมด
reptyr - เครื่องมือสำหรับ "re-ptying"
โปรแกรม
reptyr เป็นยูทิลิตี้สำหรับการเรียกใช้โปรแกรมที่มีอยู่และแนบไปกับเทอร์มินัลใหม่ เริ่มกระบวนการที่ใช้เวลานานกว่า ssh แต่ต้องออกและไม่ต้องการขัดจังหวะหรือไม่ เพียงแค่เริ่มต้นหน้าจอใช้ reptyr เพื่อคว้ามันแล้วฆ่าเซสชัน ssh และมุ่งหน้ากลับบ้าน
การใช้งาน
reptyr PID
"reptyr PID" จะจับกระบวนการด้วย id PID และแนบกับเทอร์มินัลปัจจุบันของคุณ
หลังจากติดตั้งแล้วกระบวนการจะรับอินพุตจากและเขียนเอาต์พุตไปยังเทอร์มินัลใหม่รวมถึง ^ C และ ^ Z (น่าเสียดายถ้าคุณใช้มันคุณจะต้องเรียกใช้ "bg" หรือ "fg" ในเทอร์มินัลเก่าซึ่งเป็นไปไม่ได้ที่จะแก้ไขด้วยวิธีที่เหมาะสมโดยไม่ต้องทำการแก้ไขเชลล์)