การย้ายกระบวนการที่กำลังทำงานอยู่ไปยังหน้าจอ


222

งานสำนักงานของฉันเห็นฉันเชื่อมต่อกับกล่อง Linux ผ่าน VNC เป็นประจำ

บางครั้งฉันเริ่มงานรีโมตบนคอนโซลและตระหนักในภายหลังว่าทำงานนานกว่าที่คาดไว้มาก (ควรจะเริ่มต้นหนึ่งภายใต้หน้าจอในสถานที่แรก ... )

ฉันไม่ต้องการให้เวิร์กสเตชันทำงานค้างคืนเพื่อเปิดเซสชัน VNC ฉันต้องการย้ายงานรีโมตที่รันแล้วไปยังเซสชันเซสชัน (บนกล่องรีโมต) ดังนั้นฉันสามารถปิดเวิร์กสเตชัน (และเชื่อมต่อใหม่ในเช้าวันถัดไป)

สิ่งนี้สามารถทำได้ถ้าทั้งหมด?


2
และมันคือ dupe, serverfault.com/questions/49877/… - ดูเหมือนว่ามันไม่สามารถทำได้
Paul Dixon




ค้นหาสคริปต์ screenify
Vashu

คำตอบ:


217

ดูreptyrซึ่งทำอย่างนั้น หน้า GitHub มีข้อมูลทั้งหมด

reptyr - เครื่องมือสำหรับโปรแกรม "re-ptying"

reptyr เป็นยูทิลิตี้สำหรับการเรียกใช้โปรแกรมที่มีอยู่และแนบไปกับเทอร์มินัลใหม่ เริ่มกระบวนการที่ใช้เวลานานกว่า ssh แต่ต้องออกและไม่ต้องการขัดจังหวะหรือไม่ เพียงแค่เริ่มต้นหน้าจอใช้ reptyr เพื่อคว้ามันแล้วฆ่าเซสชัน ssh และมุ่งหน้ากลับบ้าน

การใช้งาน

reptyr PID

"reptyr PID" จะจับกระบวนการด้วย id PID และแนบกับเทอร์มินัลปัจจุบันของคุณ

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


22
ถ้าอย่างฉันคุณมองไปที่ลิงค์ด้านบนและพิจารณาการติดตั้งโปรแกรมจากแหล่งข้อมูลโดยสังเขป: มันเป็นเพียงแค่apt-getระบบเดเบียน
mlissner

3
ใช้งานได้ดีมากฉันไม่เคยเห็นสิ่งนี้มาก่อน
deed02392

3
นี่มันเจ๋งมาก! ฉันจะลงคะแนน 10 ครั้งถ้าทำได้! นอกจากนี้ reptyr ยังมีอยู่ใน RedHat repos เช่นกัน เพียงแค่ 'ยำติดตั้ง' เพื่อรับมัน
Mark J. Bobak

5
ไม่ทำงานยกเว้นในกรณีที่น่ารำคาญที่สุด:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad

2
อย่างน้อยก็เป็นรูทคุณสามารถใช้reptyr -T PID
ChristophK

45

คุณไม่สามารถทำสิ่งนี้ได้อย่างง่ายดาย ฉันขอแนะนำให้ทำให้เป็นนิสัยในการเริ่มหน้าจอเป็นสิ่งแรกที่คุณทำหลังจากเปิดคอนโซล

อย่างไรก็ตามสำหรับปัญหาที่เกิดขึ้นจริงของคุณมีอีกสิ่งหนึ่งที่คุณอาจลอง: หลังจากที่มีการเปิดตัวงานของคุณจาก terminal, พื้นหลังได้โดยการพิมพ์ Ctrl-z bgแล้ว หลังจากนั้นแยกงานออกจากเปลือกหลัก disown -h %<jobid>ในทุบตีคุณต้องการจะทำอย่างไร หลังจากนั้นคุณสามารถปิดเครื่องได้อย่างปลอดภัยและงานจะยังคงทำงานต่อไป


3
สิ่งนี้ทำงานได้ดีมากสำหรับกรณีของฉัน reptyr และ retty ทั้งสองล้มเหลวในการคว้ากระบวนการ แต่สิ่งที่ฉันต้องการก็คือสามารถปิดเทอร์มินัลและปล่อยให้กระบวนการทำงาน
STW

10
FYI: หลังจากปฏิเสธไอเอ็นจีกระบวนการที่จะสามารถreptyr -ed ภายในหน้าจอ
อดัม

1
สิ่งนี้ทำให้โปรแกรมการทำงานของฉันหยุดทำงาน :(
เมห์ร์ดาด

39

ในขณะที่คุณใช้งานลีนุกซ์การใช้ retty ในกระบวนการหน้าจอที่เพิ่งเปิดตัวใหม่คืออะไร

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

เสียงเชียร์


1
ไม่ทราบว่าต้องทำอีกครั้งขอบคุณ อย่างไรก็ตามสำหรับประเภทของงานที่ใช้เวลานานที่ฉันมีอยู่ในใจฉันลังเลที่จะใช้เครื่องมือที่อ้างถึงตัวเองว่า "ทดสอบเบามาก" ฉันไปกับทางออกของเอิร์ล

1
เห็นไม่มีการตอบโต้ใน Gentoo
Sergei

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