ไม่สามารถดึงหน้าจอเดี่ยวออกเพื่อดำเนินการต่อ


11

ฉันใช้ผงสำหรับอุดรูและมีการเชื่อมต่อไร้สายที่ไม่น่าเชื่อถือดังนั้นฉันจึงใช้หน้าจอเพื่อทำงานต่อไป บ่อยครั้งที่ฉันถูกตัดการเชื่อมต่อจากนั้นฉันไม่สามารถแนบหน้าจอของฉันอีกครั้ง ฉันจะวิ่งscreen -D -RRและมันจะนั่งอยู่ที่นั่นอย่างไม่มีกำหนด ฉันได้พยายามctrl+zที่จะได้รับคอนโซลหลังของฉันตามด้วยps aux | grep screenแล้วkill -9เพื่อให้ได้ผลลัพธ์ทั้งหมดแล้วscreen -D -RRอีกครั้ง แต่ฉันได้รับผลเดียวกัน ฉันลองชุดของ d และ r ที่คุณสนใจพูดถึง แต่ก็ยังอยู่ที่นั่น หน้าจอของฉันอยู่ตรงนั้นมันจะไม่ทำอะไรเลยอย่างน้อยก็ดำเนินการต่อทั้งหมด

ใครมีเคล็ดลับหรือกลอุบายหรือแนวคิดใด ๆ เพื่อให้เซสชันหน้าจอของฉันกลับมาทำงานต่อได้หรือไม่

คำตอบ:


16

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

เพื่อแก้ไขฉันทำสิ่งนี้:

  • หาว่า tty ถืออยู่บนเซสชันใดบนหน้าจอ ps -ef | grep screen | grep pty
  • ค้นหา bash ล็อกอินที่เชื่อมโยงกับ tty นั้น ps -ef | grep bash | grep $PTY
  • ฆ่าทุบตีนั้น kill -KILL $PID

สิ่งนี้ทำให้หน้าจอทำการปลดการเชื่อมต่ออย่างถูกต้องและให้คุณเชื่อมต่อตามปกติ

ดูตัวอย่างสคริปต์ที่นี่โดยอัตโนมัติที่นี่


ps -ef | หน้าจอ grep grep tty ไม่เคยพิมพ์อะไรเลยเพราะ ps -ef | หน้าจอ grep ไม่ส่งคืนสิ่งใดด้วยสตริง tty
เดฟแอรอนสมิ ธ

อันที่จริงสคริปต์ตัวอย่างดูเหมือนจะทำเคล็ดลับ ขอบคุณ!
เดฟแอรอนสมิ ธ

1
ใช่ฉันหมายถึง 'pty' ไม่ใช่ 'tty'
David Mackintosh

2

ฉันมีปัญหาที่คล้ายกันกับเซสชันหน้าจอของฉัน ฉันตั้งชื่อพวกเขาและตั้งค่าเป็นเซสชันผู้ใช้หลายคน สิ่งที่ฉันพบคือมันแสดงรายการเซสชันของฉัน แต่บอกฉันว่าฉันไม่มีใครเชื่อมต่อ จากนั้นฉันก็ลอง:

screen -x <session_name>

มันทำงานเหมือนแชมป์!


1

ฉันไม่สามารถบอกได้ว่าเคยมีปัญหากับหน้าจอที่ไม่กลับมาไม่ว่าจะใช้การเชื่อมต่อแบบไหน วิธีปกติของฉัน:

ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)

ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName

1
ตัวอย่างเช่นรายการหน้าจอส่งคืน 32322.mySession (แนบ) จากนั้นฉันจะคัดกรอง -d mySession จากนั้นหน้าจอ - รายการยังคงส่งคืน 32322.mySession (แนบ) และหน้าจอ -r mySession ส่งคืนไม่มีหน้าจอใดที่จะกลับมาทำงานต่อ daveSession ที่ตรงกัน
Dave Aaron Smith

คุณลอง "screen -d" หรือยัง?
Jason Antman

0

เป็นไปได้ไหมว่าข้อผิดพลาดนี้ส่งผลกระทบต่อคุณ?

http://savannah.gnu.org/bugs/?27462

คุณลองทำวิธีแก้ปัญหาที่พวกเขาแนะนำและดูว่ามันใช้งานได้หรือไม่?


การแก้ปัญหาไม่สมเหตุสมผลสำหรับฉัน เอาต์พุตของหน้าจอ ps -ef | grep ของฉันดูไม่เหมือนตัวอย่างเลย
เดฟแอรอนสมิ ธ

0

Soulrce: https://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname

0

หากคุณฉลาดเช่นฉันคุณกำลังพยายามเริ่มเซสชันหน้าจอให้เริ่มต้นเช่นเดียวrootกับบัญชีผู้ใช้ทั่วไป พบสิ่งนี้ด้วยการls /var/run/screenแสดงไดเรกทอรีสำหรับฉันroot


0

ฉันมีปัญหาเดียวกันเป็นครั้งคราว (หน้าจอ -r -d ไม่ทำงานต่อไม่ตอบสนอง) หากต้องการแก้ไขให้ค้นหาเทอร์มินัล (tty / pty) ที่เชื่อมโยงกับเซสชันหน้าจอ:

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

ค้นหาเทอร์มินัลที่ระบุไว้ (ในตัวอย่างนี้ pts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

ฆ่ากระบวนการบนเทอร์มินัลนั้น (โดยปกติคือเชลล์ของคุณ):

kill 12293

เรียกใช้ ps อีกครั้งเพื่อให้แน่ใจว่ามันหายไป ถ้าไม่ :

kill -9 12293

บนเซิร์ฟเวอร์ของฉัน (gnu / linux) บางครั้งฉันจะต้องฆ่า -9 หลายครั้งจนกว่ามันจะตาย

หลังจากกระบวนการทั้งหมดบน tty หายไปหน้าจอควรกลับมาทำงานอย่างถูกต้อง:

screen -r -d

-1

screen -wipeนำหน้าจอที่ตายแล้วด้วย


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