หน้าจอ GNU ค้างเมื่อเริ่มต้นเซสชันผ่าน SSH ทำงานในพื้นที่ เกิดอะไรขึ้น


3

ใน iMac ที่ทำงาน Snow Leopard ฉันสามารถเปิดหน้าต่างเทอร์มินัลและเริ่มเซสชัน 'หน้าจอ' โดยไม่มีปัญหา อย่างไรก็ตามถ้าฉัน ssh ลงในเครื่องเดียวกัน (จากที่อื่นหรือในพื้นที่) แล้วลองเริ่มเซสชัน 'หน้าจอ' ก็แค่แฮงค์ ไม่มีเอาต์พุตเลย มันจะไม่ตอบสนองต่อ Ctrl-d, Ctrl-c ฯลฯ และจะต้องถูกฆ่าผ่าน PID เซสชั่นที่สร้างขึ้นในสถานีท้องถิ่นสามารถดำเนินการต่อจากเซสชั่น ssh สิ่งนั้นช่วยให้เกิดข้อสงสัยโดยตรงต่อการกำหนดค่าใด ๆ หรือไม่?

ฉันสงสัยว่ามีปัญหากับหนึ่งใน. bashrc, .profile ฯลฯ แต่ไม่ทราบว่าจะใช้กับสถานการณ์นี้และไม่ได้ทำการเปลี่ยนแปลงใด ๆ ในพื้นที่นั้นเมื่อเร็ว ๆ นี้ ทั้งหมดนี้ทำในฐานะผู้ใช้คนเดียวกัน

ฉันมั่นใจว่า 99% นี้ใช้งานได้ไม่นานมานี้ แต่ฉันคิดว่ามีความเป็นไปได้น้อยที่สถานการณ์นี้ไม่ได้ถูกลดทอนสำหรับฉัน

ในการตอบคำถาม Gilles ด้านล่าง:

ตัวแปรสภาพแวดล้อมเหมือนกันในทั้งสองกรณี ส่วนใหญ่จะว่างเปล่า - มีการตั้งค่าเฉพาะคอลัมน์, LINES, HOME, PATH, SHELL และ TERM

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

การดูกระบวนการสองหน้าจอที่เริ่มต้นกระบวนการที่มีหมายเลขต่ำกว่ากำลังทำสิ่งต่อไปนี้:

$ sudo dtruss -p 1545
SYSCALL(args)        = return
sigreturn(0x7FFF5FBFEE80, 0x1E, 0x7FFF5FBFEE80)      = 0 Err#-2
__pthread_canceled(0x0, 0x0, 0x7FFF5FBFEF38)         = -1 Err#22
setitimer(0x0, 0x7FFF5FBFEF40, 0x7FFF5FBFEF20)       = 0 0
kill(0x60A, 0x0, 0x1)        = 0 0
sigaction(0xE, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)       = 0 0
setitimer(0x0, 0x7FFF5FBFEF40, 0x7FFF5FBFEF20)       = 0 0
sigprocmask(0x0, 0x0, 0x7FFF5FBFEF4C)        = 0x0 0
sigsuspend(0x0, 0x0, 0x0)        = -1 Err#4
<repeats approx every 10s>

หมายเลขที่สูงกว่าจะแสดงผลเพียงครั้งเดียวเท่านั้น:

$ sudo dtruss -p 1546
SYSCALL(args)        = return

ผลลัพธ์ของ 'dtruss -f -p $ pid_of_bash_that_starts_screen' ที่มีการลบการทำซ้ำคือ:

1500/0x15a94:  write_nocancel(0x2, "s\0", 0x1)       = 1 0
1500/0x15a94:  sigprocmask(0x1, 0x0, 0x7FFF5FBFEB00)         = 0x0 0
1500/0x15a94:  sigaltstack(0x0, 0x7FFF5FBFEAF0, 0x0)         = 0 0
1500/0x15a94:  read(0x0, "c\0", 0x1)         = 1 0
1500/0x15a94:  write_nocancel(0x2, "c\0", 0x1)       = 1 0
1500/0x15a94:  sigprocmask(0x1, 0x0, 0x7FFF5FBFEB00)         = 0x0 0
1500/0x15a94:  sigaltstack(0x0, 0x7FFF5FBFEAF0, 0x0)         = 0 0
1500/0x15a94:  read(0x0, "r\0", 0x1)         = 1 0
1500/0x15a94:  write_nocancel(0x2, "r\0", 0x1)       = 1 0
1500/0x15a94:  sigprocmask(0x1, 0x0, 0x7FFF5FBFEB00)         = 0x0 0
1500/0x15a94:  sigaltstack(0x0, 0x7FFF5FBFEAF0, 0x0)         = 0 0
1500/0x15a94:  read(0x0, "e\0", 0x1)         = 1 0
1500/0x15a94:  write_nocancel(0x2, "e\0", 0x1)       = 1 0
1500/0x15a94:  sigprocmask(0x1, 0x0, 0x7FFF5FBFEB00)         = 0x0 0
1500/0x15a94:  sigaltstack(0x0, 0x7FFF5FBFEAF0, 0x0)         = 0 0
1500/0x15a94:  read(0x0, "e\0", 0x1)         = 1 0
1500/0x15a94:  write_nocancel(0x2, "e\0", 0x1)       = 1 0
1500/0x15a94:  sigprocmask(0x1, 0x0, 0x7FFF5FBFEB00)         = 0x0 0
1500/0x15a94:  sigaltstack(0x0, 0x7FFF5FBFEAF0, 0x0)         = 0 0
1500/0x15a94:  read(0x0, "n\0", 0x1)         = 1 0
1500/0x15a94:  write_nocancel(0x2, "n\352\277_\377\177\0", 0x1)      = 1 0
1500/0x15a94:  sigprocmask(0x1, 0x0, 0x7FFF5FBFEB00)         = 0x0 0
1500/0x15a94:  sigaltstack(0x0, 0x7FFF5FBFEAF0, 0x0)         = 0 0
1500/0x15a94:  fork()        = 1635 0
1500/0x15a94:  setpgid(0x663, 0x663, 0x5DD)      = 0 0
1500/0x15a94:  sigprocmask(0x3, 0x7FFF5FBFF9C8, 0x0)         = 0x0 0
1500/0x15a94:  sigprocmask(0x1, 0x7FFF5FBFFA8C, 0x7FFF5FBFFA88)      = 0x0 0
1500/0x15a94:  sigprocmask(0x1, 0x7FFF5FBFFA2C, 0x7FFF5FBFFA28)      = 0x0 0
1500/0x15a94:  ioctl(0xFF, 0x4004667A, 0x7FFF5FBFF97C)       = 0 0
1500/0x15a94:  ioctl(0xFF, 0x80047476, 0x7FFF5FBFF9FC)       = 0 0
1500/0x15a94:  sigprocmask(0x3, 0x7FFF5FBFFA28, 0x0)         = 0x0 0
1500/0x15a94:  sigprocmask(0x3, 0x7FFF5FBFFA88, 0x0)         = 0x0 0
1500/0x15a94:  sigprocmask(0x1, 0x7FFF5FBFFA8C, 0x7FFF5FBFFA88)      = 0x0 0
1635/0x1654c:  ioctl(0x3, 0x80086804, 0x7FFF5FBFD6A0)        = 0 0
1635/0x1654c:  close(0x3)        = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD590, 0x2, 0x7FFF5FBFD580)         = 0 0
1635/0x1654c:  bsdthread_register(0x7FFF82BA42FC, 0x7FFF82B84F18, 0x2000)        = 0 0
1635/0x1654c:  thread_selfid(0x7FFF82BA42FC, 0x7FFF82B84F18, 0x0)        = 91468 0
1635/0x1654c:  open_nocancel("/dev/urandom\0", 0x0, 0x7FFF705D1B60)      = 3 0
1635/0x1654c:  read_nocancel(0x3, "g\307\017\235\330=\212e\272\357o\351\207\365\207\0023Ra^\372\344z8\nf\253\205\335\177v\261\365\241pj\360rNW\333\344\331\300\250W\f\273O&<\232\257\034^\350!\n\351&\231P\\\025\0", 0x40)       = 64 0
1635/0x1654c:  close_nocancel(0x3)       = 0 0
1635/0x1654c:  mmap(0x0, 0x3000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001)         = 0x59000 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD410, 0x2, 0x7FFF5FBFD3D0)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD3D0, 0x2, 0x7FFF5FBFD468)         = 0 0
1635/0x1654c:  getpid(0x7FFF5FBFD360, 0x7FFFFFE00050, 0x0)       = 1635 0
1635/0x1654c:  open_nocancel("/dev/urandom\0", 0x0, 0x0)         = 3 0
1635/0x1654c:  read_nocancel(0x3, ":juq\236\223OW\305\231,\002\205\235E\346_\236>H\t\026=\213\220\\\020\tN?\240\254\361\262q<e\300M\252\200le<\241$\027\377\252Xs\034\355\212+#z+\241\033I\346s\017\227\244\351\227\024\272\361\263Qn\315\354U\312\211\017\313\265\f\033I\341\300\372Id\327\251tB\016\026/(\313\214\266\242S\275\351\372Y{\0", 0x6C)         = 108 0
1635/0x1654c:  close_nocancel(0x3)       = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD410, 0x2, 0x7FFF5FBFD43C)         = 0 0
1635/0x1654c:  mmap(0x0, 0xD000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001)         = 0x5C000 0
1635/0x1654c:  mmap(0x0, 0xD000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001)         = 0x69000 0
1635/0x1654c:  mmap(0x0, 0x1000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001)         = 0x76000 0
1635/0x1654c:  mmap(0x0, 0x200000, 0x3, 0x1002, 0x7000000, 0x7FFF00000001)       = 0x77000 0
1635/0x1654c:  munmap(0x100077000, 0x89000)      = 0 0
1635/0x1654c:  munmap(0x100200000, 0x77000)      = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD570, 0x2, 0x7FFF5FBFD530)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD530, 0x2, 0x7FFF705DE6C0)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD570, 0x2, 0x7FFF5FBFD530)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD530, 0x2, 0x7FFF705DE6C4)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD570, 0x2, 0x7FFF5FBFD530)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD530, 0x2, 0x7FFF705DE6C8)         = 0 0
1635/0x1654c:  getdtablesize(0x0, 0x7FFF5FBFFA40, 0x0)       = 256 0
1635/0x1654c:  close(0xFF)       = -1 Err#9
...
1635/0x1654c:  close(0x3)        = -1 Err#9
1635/0x1654c:  getuid(0x10002D277, 0xFFFFFFFFFFFFFFFF, 0x7FFF5FBFF3D1)       = 502 0
1635/0x1654c:  getgid(0x10002D277, 0xFFFFFFFFFFFFFFFF, 0x0)      = 20 0
1635/0x1654c:  geteuid(0x10002D277, 0xFFFFFFFFFFFFFFFF, 0x0)         = 502 0
1635/0x1654c:  getegid(0x10002D277, 0xFFFFFFFFFFFFFFFF, 0x0)         = 20 0
1635/0x1654c:  sigaction(0x19, 0x7FFF5FBFF200, 0x7FFF5FBFF240)       = 0 0
1635/0x1654c:  sigaction(0xD, 0x7FFF5FBFF200, 0x7FFF5FBFF240)        = 0 0
1635/0x1654c:  access("/Users/chris/.nethackrc\0", 0x0, 0x17)        = -1 Err#2
1635/0x1654c:  getlogin(0x7FFF705D05A0, 0xFF, 0xFFFFFFFFFFFFFFFF)        = 0 0
1635/0x1654c:  mmap(0x0, 0x1000000, 0x3, 0x1002, 0x2000000, 0x100000000)         = 0x200000 0
1635/0x1654c:  munmap(0x100200000, 0x600000)         = 0 0
1635/0x1654c:  munmap(0x101000000, 0x200000)         = 0 0
1635/0x1654c:  shm_open(0x7FFF82CBF980, 0x0, 0x0)        = 3 0
1635/0x1654c:  mmap(0x0, 0x1000, 0x1, 0x1, 0x3, 0x100000000)         = 0x77000 0
1635/0x1654c:  close_nocancel(0x3)       = 0 0
1635/0x1654c:  getrlimit(0x1008, 0x7FFF5FBFEFF0, 0x7FFF82B6E86C)         = 0 0
1635/0x1654c:  open_nocancel("/etc/sysinfo.conf\0", 0x0, 0x1B6)      = -1 Err#2
1635/0x1654c:  stat64("/var/folders/jJ/jJ6dXorgFwuvL9p+qVUNVU+++TM/\0", 0x7FFF5FBFED00, 0x0)         = 0 0
1635/0x1654c:  mkdir("/var/folders/jJ/jJ6dXorgFwuvL9p+qVUNVU+++TM/-Tmp-/\0", 0x1C0, 0x7FFF5FBFEE13)      = -1 Err#17
1635/0x1654c:  access("/var/folders/jJ/jJ6dXorgFwuvL9p+qVUNVU+++TM/-Tmp-/.screen\0", 0x0, 0x3C0)         = 0 0
1635/0x1654c:  stat64("/var/folders/jJ/jJ6dXorgFwuvL9p+qVUNVU+++TM/-Tmp-/.screen\0", 0x7FFF5FBFF2C0, 0x0)        = 0 0
1635/0x1654c:  umask(0x12, 0x7FFF5FBFF2C0, 0x80808000)       = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFF110, 0x2, 0x7FFF5FBFF120)         = 0 0
1635/0x1654c:  sigaction(0x1, 0x7FFF5FBFF200, 0x7FFF5FBFF240)        = 0 0
1635/0x1654c:  fork()        = 1636 0
1635/0x1654c:  setgid(0x14, 0x7FFF5FBFF7F1, 0x10005364B)         = 0 0
1635/0x1654c:  setuid(0x1F6, 0x7FFF5FBFF7F1, 0x0)        = 0 0
1635/0x1654c:  sigaction(0x1, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)        = 0 0
1635/0x1654c:  sigaction(0x1, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)        = 0 0
1635/0x1654c:  sigaction(0x1E, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)       = 0 0
1635/0x1654c:  sigaction(0x1F, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)       = 0 0
1635/0x1654c:  sigaction(0x2, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)        = 0 0
1635/0x1654c:  sigaction(0x12, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)       = 0 0
1635/0x1654c:  sigaction(0x1C, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)       = 0 0
1635/0x1654c:  sigaction(0xE, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)        = 0 0
1635/0x1654c:  setitimer(0x0, 0x7FFF5FBFEF40, 0x7FFF5FBFEF20)        = 0 0
1635/0x1654c:  sigprocmask(0x0, 0x0, 0x7FFF5FBFEF4C)         = 0x0 0
1636/0x1654e:  fstat64(0x2, 0x7FFF5FBFE5F0, 0x7FFF5FBFE6BC)      = 0 0
1636/0x1654e:  ioctl(0x2, 0x4004667A, 0x7FFF5FBFE63C)        = 0 0
1636/0x1654e:  write_nocancel(0x2, "SCREEN: can't detach from console\n\0", 0x22)        = 34 0
1635/0x1654c:  sigsuspend(0x0, 0x0, 0x0)         = -1 Err#4
1635/0x1654c:  __pthread_canceled(0x0, 0x0, 0x7FFF5FBFEF38)      = -1 Err#22
1635/0x1654c:  setitimer(0x0, 0x7FFF5FBFEF40, 0x7FFF5FBFEF20)        = 0 0
1635/0x1654c:  kill(0x664, 0x0, 0x1)         = 0 0
1635/0x1654c:  sigaction(0xE, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)        = 0 0
1635/0x1654c:  setitimer(0x0, 0x7FFF5FBFEF40, 0x7FFF5FBFEF20)        = 0 0
1635/0x1654c:  sigprocmask(0x0, 0x0, 0x7FFF5FBFEF4C)         = 0x0 0
1500/0x15a94:  read(0x0, "\r\006\0", 0x1)        = 1 0
1500/0x15a94:  write_nocancel(0x2, "\n\006\0", 0x1)      = 1 0
1500/0x15a94:  sigprocmask(0x1, 0x1000A5984, 0x1000A5988)        = 0x0 0
1500/0x15a94:  ioctl(0x0, 0x80487414, 0x1000A59C0)       = 0 0
1500/0x15a94:  sigprocmask(0x3, 0x1000A5988, 0x0)        = 0x0 0
1500/0x15a94:  sigaction(0x2, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)        = 0 0
1500/0x15a94:  sigaction(0xF, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)        = 0 0
1500/0x15a94:  sigaction(0x3, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)        = 0 0
1500/0x15a94:  sigaction(0xE, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)        = 0 0
1500/0x15a94:  sigaction(0x12, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)       = 0 0
1500/0x15a94:  sigaction(0x16, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)       = 0 0
1500/0x15a94:  sigaction(0x15, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)       = 0 0
1500/0x15a94:  sigaction(0x1C, 0x7FFF5FBFEAE0, 0x7FFF5FBFEB10)       = 0 0
1500/0x15a94:  sigaction(0x2, 0x7FFF5FBFEB00, 0x7FFF5FBFEB30)        = 0 0
1500/0x15a94:  gettimeofday(0x7FFF5FBFE9D0, 0x0, 0x1F80)         = 1289128377 0
1500/0x15a94:  sigprocmask(0x1, 0x7FFF5FBFF9CC, 0x7FFF5FBFF9C8)      = 0x0 0
1635/0x1654c:  fork()        = 0 0
1635/0x1654c:  thread_selfid(0x7FFF705D4C20, 0x3, 0x1)       = 91468 0
1635/0x1654c:  getpid(0x7FFF705D4C20, 0x3, 0x0)      = 1635 0
1635/0x1654c:  sigprocmask(0x3, 0x1000A69D8, 0x0)        = 0x0 0
1635/0x1654c:  sigaction(0x12, 0x7FFF5FBFF950, 0x7FFF5FBFF980)       = 0 0
1635/0x1654c:  sigaction(0x15, 0x7FFF5FBFF950, 0x7FFF5FBFF980)       = 0 0
1635/0x1654c:  sigaction(0x16, 0x7FFF5FBFF960, 0x7FFF5FBFF990)       = 0 0
1635/0x1654c:  setpgid(0x663, 0x663, 0x0)        = 0 0
1635/0x1654c:  sigprocmask(0x1, 0x7FFF5FBFF98C, 0x7FFF5FBFF988)      = 0x0 0
1635/0x1654c:  ioctl(0xFF, 0x4004667A, 0x7FFF5FBFF8DC)       = 0 0
1635/0x1654c:  ioctl(0xFF, 0x80047476, 0x7FFF5FBFF95C)       = 0 0
1635/0x1654c:  sigprocmask(0x3, 0x7FFF5FBFF988, 0x0)         = 0x0 0
1635/0x1654c:  sigaction(0x2, 0x7FFF5FBFF950, 0x7FFF5FBFF980)        = 0 0
1635/0x1654c:  sigaction(0x3, 0x7FFF5FBFF950, 0x7FFF5FBFF980)        = 0 0
1635/0x1654c:  sigaction(0xF, 0x7FFF5FBFF950, 0x7FFF5FBFF980)        = 0 0
1635/0x1654c:  sigaction(0x14, 0x7FFF5FBFF950, 0x7FFF5FBFF980)       = 0 0
1635/0x1654c:  execve(0x1001D0C30, 0x1001D0D20, 0x1001CFC40)         = 0 0
1635/0x1654c:  gettimeofday(0x7FFF5FBFF850, 0x0, 0x7FFF5FBFFA50)         = 1289128377 0
1635/0x1654c:  getpid(0x7FFF5FBFF850, 0x0, 0x0)      = 1635 0
1635/0x1654c:  open_nocancel("/dev/urandom\0", 0x0, 0x0)         = 3 0
1635/0x1654c:  read_nocancel(0x3, "\021M\323J\242\363\227\001py\363h\331\321)\326\216\300r\n9r\b\252g\342\326\003\242\340\246\311\0", 0x6C)      = 108 0
1635/0x1654c:  close_nocancel(0x3)       = 0 0
1635/0x1654c:  issetugid(0x100000000, 0x7FFF5FBFFB18, 0x7FFF5FC40530)        = 0 0
1635/0x1654c:  geteuid(0x100000000, 0x7FFF5FBFFB18, 0x0)         = 502 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD740, 0x2, 0x7FFF5FBFD700)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFD700, 0x2, 0x7FFF5FBFD79C)         = 0 0
1635/0x1654c:  shared_region_check_np(0x7FFF5FBFD908, 0x0, 0x7FFF5FC1DC86)       = 0 0
1635/0x1654c:  stat64("/Applications/ImageMagick/lib/libncurses.5.4.dylib\0", 0x7FFF5FBFCE50, 0x7FFF5FBFD0F0)        = -1 Err#2
1635/0x1654c:  stat64("/usr/lib/libncurses.5.4.dylib\0", 0x7FFF5FBFCAB0, 0x7FFF5FBFD0F0)         = 0 0
1635/0x1654c:  stat64("/Applications/ImageMagick/lib/libSystem.B.dylib\0", 0x7FFF5FBFCE50, 0x7FFF5FBFD0F0)       = -1 Err#2
1635/0x1654c:  stat64("/usr/lib/libSystem.B.dylib\0", 0x7FFF5FBFCAB0, 0x7FFF5FBFD0F0)        = 0 0
1635/0x1654c:  stat64("/Applications/ImageMagick/lib/libmathCommon.A.dylib\0", 0x7FFF5FBFCBB0, 0x7FFF5FBFCE50)       = -1 Err#2
1635/0x1654c:  stat64("/usr/lib/system/libmathCommon.A.dylib\0", 0x7FFF5FBFC810, 0x7FFF5FBFCE50)         = 0 0
1635/0x1654c:  madvise(0x7FFF89561000, 0x2000, 0x5)      = 0 0
1635/0x1654c:  open("/dev/dtracehelper\0", 0x2, 0x7FFF5FC451F8)      = 3 0
1635/0x1654c:  ioctl(0x0, 0x40487413, 0x7FFF5FBFF1E0)        = 0 0
1635/0x1654c:  fstat64(0x0, 0x7FFF5FBFF150, 0x0)         = 0 0
1635/0x1654c:  open_nocancel("/dev/\0", 0x100004, 0x0)       = 3 0
1635/0x1654c:  fcntl_nocancel(0x3, 0x2, 0x1)         = 0 0
1635/0x1654c:  __sysctl(0x7FFF5FBFE5E0, 0x2, 0x7FFF705D6698)         = 0 0
1635/0x1654c:  fstatfs64(0x3, 0x7FFF5FBFE630, 0x0)       = 0 0
1635/0x1654c:  getdirentries64(0x3, 0x100801400, 0x1000)         = 3080 0
1635/0x1654c:  lstat64("/dev/.\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/..\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/console\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/tty\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/null\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/zero\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/klog\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/fd\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/stdin\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/stdout\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/stderr\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/auditpipe\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/ttyp0\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/ptyp0\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
...
1635/0x1654c:  lstat64("/dev/ttywf\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/ptywf\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/ptmx\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/vn0\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/vn1\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/vn2\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/vn3\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/bpf0\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/bpf1\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/bpf2\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/bpf3\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/fsevents\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/random\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/urandom\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/dtrace\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/dtracehelper\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/lockstat\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/sdt\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/systrace\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/machtrace\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/fbt\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/profile\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  getdirentries64(0x3, 0x100801400, 0x1000)         = 888 0
1635/0x1654c:  lstat64("/dev/pmCPUClient\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/disk0\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/rdisk0\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/disk0s1\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/rdisk0s1\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/disk0s2\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/rdisk0s2\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/io8log\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/io8logmt\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/cu.Bluetooth-Modem\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/tty.Bluetooth-Modem\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/cu.W880i-SerialPort\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/tty.W880i-SerialPort\0", 0x7FFF5FBFEF70, 0x0)       = 0 0
1635/0x1654c:  lstat64("/dev/cu.Bluetooth-PDA-Sync\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/tty.Bluetooth-PDA-Sync\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/autofs\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/autofs_nowait\0", 0x7FFF5FBFEF70, 0x0)      = 0 0
1635/0x1654c:  lstat64("/dev/autofs_control\0", 0x7FFF5FBFEF70, 0x0)         = 0 0
1635/0x1654c:  lstat64("/dev/ttys000\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  lstat64("/dev/ttys002\0", 0x7FFF5FBFEF70, 0x0)        = 0 0
1635/0x1654c:  close_nocancel(0x3)       = 0 0
1635/0x1654c:  stat64("/dev/ttys002\0", 0x7FFF5FBFF2C0, 0x7FFF705D03A0)      = 0 0
1635/0x1654c:  seteuid(0x1F6, 0x6, 0x0)      = 0 0
1635/0x1654c:  setegid(0x14, 0x6, 0x0)       = 0 0
1635/0x1654c:  open("/dev/ttys002\0", 0x6, 0x0)      = 3 0
1635/0x1654c:  seteuid(0x1F6, 0x6, 0x0)      = 0 0
1635/0x1654c:  setegid(0x14, 0x6, 0x0)       = 0 0
1635/0x1654c:  close(0x3)        = 0 0
1635/0x1654c:  ioctl(0x0, 0x40487413, 0x100053C20)       = 0 0
1635/0x1654c:  umask(0x0, 0x40487413, 0x0)       = 18 0
1635/0x1654c:  geteuid(0x1, 0x7FFF5FBFEDE0, 0x400)       = 502 0
1636/0x1654e:  fork()        = 0 0
1636/0x1654e:  thread_selfid(0x7FFF705D4C20, 0x3, 0x1)       = 91470 0
1636/0x1654e:  getpid(0x7FFF705D4C20, 0x3, 0x0)      = 1636 0
1636/0x1654e:  seteuid(0x1F6, 0x2, 0x0)      = 0 0
1636/0x1654e:  setegid(0x14, 0x2, 0x0)       = 0 0
1636/0x1654e:  open("/dev/ttys002\0", 0x2, 0x0)      = 3 0
1636/0x1654e:  seteuid(0x1F6, 0x2, 0x0)      = 0 0
1636/0x1654e:  setegid(0x14, 0x2, 0x0)       = 0 0
1636/0x1654e:  close_nocancel(0x0)       = 0 0
1636/0x1654e:  open_nocancel("/dev/null\0", 0x0, 0x1B6)      = 0 0
1636/0x1654e:  close_nocancel(0x1)       = 0 0
1636/0x1654e:  open_nocancel("/dev/null\0", 0x601, 0x1B6)        = 1 0
1636/0x1654e:  close_nocancel(0x2)       = 0 0
1636/0x1654e:  open_nocancel("/dev/null\0", 0x601, 0x1B6)        = 2 0
1636/0x1654e:  audit_session_self(0x664, 0x7FFF5FBFF228, 0x7FFF82B6B366)         = 2563 0
1635/0x1654c:  sigsuspend(0x0, 0x0, 0x0)         = -1 Err#4
1635/0x1654c:  sigreturn(0x7FFF5FBFEE80, 0x1E, 0x7FFF5FBFEE80)       = 0 Err#-2
1635/0x1654c:  __pthread_canceled(0x0, 0x0, 0x7FFF5FBFEF38)      = -1 Err#22
1635/0x1654c:  setitimer(0x0, 0x7FFF5FBFEF40, 0x7FFF5FBFEF20)        = 0 0
1635/0x1654c:  kill(0x664, 0x0, 0x1)         = 0 0
1635/0x1654c:  sigaction(0xE, 0x7FFF5FBFEF10, 0x7FFF5FBFEF50)        = 0 0
1635/0x1654c:  setitimer(0x0, 0x7FFF5FBFEF40, 0x7FFF5FBFEF20)        = 0 0
1635/0x1654c:  sigprocmask(0x0, 0x0, 0x7FFF5FBFEF4C)         = 0x0 0

เปรียบเทียบค่าของตัวแปรสภาพแวดล้อมที่ระบุไว้ในส่วน“ สภาพแวดล้อม” ของคู่มือหน้าจอเมื่ออยู่ในเครื่องเทอร์มินัลและมากกว่า ssh เมื่อหน้าจอหยุดทำงานCtrl+a dกระตุ้นการตอบสนองใด ๆ ดูกระบวนการหน้าจอจากเทอร์มินัลอื่น: ใช้เวลา CPU นานหรือไม่ ลองดูกระบวนการบนหน้าจอด้วยdtruss -p 12345ที่ 12345 คือ ID กระบวนการ (คุณต้องเป็นรูท)
Gilles

ฉันได้เพิ่มคำตอบสำหรับคำถามข้างต้นเพื่อให้การจัดรูปแบบดีขึ้น
คริส

คุณมี.screenrc? (ถ้าคุณไม่ลองไม่ได้.) ตอนนี้ที่นี่เป็นบางสิ่งที่จะลองในครั้ง ssh ไปนี้screen bash; screen ls; กลายเป็นรากและเรียกscreen; dtruss screenรากกลายเป็นและเรียกใช้
Gilles

มันเป็นเมื่อพยายาม. screenrc เป็นครั้งแรก (เพื่อแสดงแท็บตามเส้นด้านล่าง) ที่ฉันค้นพบปัญหา การลบไฟล์ไม่มีความแตกต่าง ลองกับบัญชีผู้ใช้ใหม่เป็นครั้งแรกที่มีปัญหาเดียวกัน ฉันได้จับเอาท์พุทจาก dtruss สำหรับทั้งสองกรณีและพวกเขาย่อมแตกต่างกันอย่างหลีกเลี่ยงไม่ได้ แต่จากจุดเริ่มต้นที่น่าแปลกใจ กรณีการทำงานทำ lstat64 () บนพวงของ / dev / {p, t} tytN (N = 6,7,8,9, A) จากนั้น stat64 (), mkdir (), access () และอีกอัน stat64 () ภายใน $ TMPDIR ของฉัน มีการอ่าน terminfo เป็นต้นก่อนที่พวกเขาจะมาบรรจบกับ ioctl ()
Chris

ฉันได้เพิ่มเอาท์พุท 'dtruss' ของกรณีที่ล้มเหลวในคำถาม กรณีการทำงานสามารถใช้ได้หากต้องการ แต่มีความยาว 2,300 บรรทัด
Chris

คำตอบ:


5

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

  • คุณต้องติดตั้งเครื่องมือพัฒนา Apple (Xcode)
  • ดาวน์โหลดแหล่งที่มาหน้าจอ (มีรุ่นที่ใหม่กว่าหน้าจอ -19 ซึ่งคุณจะต้องนำรหัสที่กระทำผิดออกมาด้วยมือscreen.c) จากนั้นแยกไฟล์ออก:

    tar -xzf screen-16.tar.gz
    cd screen-16
    
  • จะออกชิ้นแรกและที่สามของแพทช์ไปscreen.c; นั่นคือpatches/screen.c.diffตอนนี้ควรมี

    --- screen.c    2003-09-08 07:26:41.000000000 -0700
    +++ screen.c    2009-02-13 12:05:05.000000000 -0800
    @@ -929,6 +934,16 @@
        Panic(0, "No $SCREENDIR with multi screens, please.");
     #endif
         }
    +#ifdef __APPLE__
    +    else if (!multi && real_uid == eff_uid) {
    +      static char DarwinSockDir[PATH_MAX];
    +      if (confstr(_CS_DARWIN_USER_TEMP_DIR, DarwinSockDir, sizeof(DarwinSockDir))) {
    +   strlcat(DarwinSockDir, ".screen", sizeof(DarwinSockDir));
    +   SockDir = DarwinSockDir;
    +      }
    +    }
    +#endif /* __APPLE__ */
    +
     #ifdef MULTIUSER
       if (multiattach)
         {
    
  • ตอนนี้รวบรวมรหัส:

    make install_source
    make
    
  • ตรวจสอบว่าปฏิบัติการที่เกิดขึ้นนั้น/tmp/screen/Build/screenทำงานได้หรือไม่

  • ดูบล็อกของ D4T3N7ODสำหรับวิธีการเปลี่ยนหน้าจออย่างเป็นทางการของคุณ

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

  • หน้าจอส้อมกระบวนการเด็กซึ่งหลังจากที่เปิดค้าง/dev/nullอยู่บนมาตรฐาน {ในออกผิดพลาด} audit_session_selfและเรียก สถานที่ที่เกี่ยวข้องในแหล่งที่มาอยู่ในscreen.cที่ที่เราเห็นการเรียกร้องให้ Apple API ส่วนตัว:

    #if defined(__APPLE__) && !TARGET_OS_EMBEDDED
        if (_vprocmgr_detach_from_console(0) != NULL)
            errx(1, "can't detach from console");
    #endif
    
  • รหัสนี้ดูเหมือนว่าจะมาจากแพทช์แอปเปิ้ลหน้าจอ 11

  • การดำเนินการของ_vprocmgr_detach_from_consoleดูเหมือนจะอยู่ในlibvprocที่ที่มันนำไปสู่

    task_name_for_pid(mach_task_self(), getpid(), &tnp);
    vproc_mig_switch_to_session(bootstrap_port, tnp, (char *)target_session, _audit_session_self(), &new_bsport))
    

    ที่นี่เรารับรู้_audit_session_selfการเรียกระบบครั้งสุดท้าย (ดาร์วิน) ที่ใช้งานได้

  • switch_to_sessionถัดลงมาเป็นสาย Mach นี่คือที่ฉันสูญเสียการติดตาม


ฟังดูดีมาก แต่อาจเป็นวันหรือสองวันก่อนที่ฉันจะมีโอกาสนั่งลงและทำตามขั้นตอน 10.6.5 ในอุดมคติ (เนื่องจากวันใดวันหนึ่งตอนนี้) จะแก้ไขอย่างถูกต้องดังนั้นฉันอาจรอดูว่าสิ่งนั้นสร้างความแตกต่างหรือไม่ หรือว่าฉันเป็นคนมองโลกในแง่ดีเกินไป? อย่างไรก็ตามขอขอบคุณที่ไล่ล่าเจ้าตัวนี้
Chris

ปัญหานี้เกิดขึ้นอีกครั้งใน 10.12.6 (ทำงานได้ดีใน 10.11.6) มันยังหยุดพักซึ่งเรียกว่า vproc_detach_from_console เดียวกัน
sabujp

0

สิ่งนี้อยู่ใน macOS 10.12.6 (ทำงานได้ดีใน 10.11.6 โดยไม่มีการเปลี่ยนแปลงด้านล่าง)

หากคุณกำลังเข้าสู่ระบบผ่าน ssh และ nohup ล้มเหลวในการเรียกระบบเดียวกันกับข้อผิดพลาด ioctl และไม่ได้กำหนดและหน้าจอจะแขวนตามที่อธิบายไว้ข้างต้นเปิดใช้งาน UsePAM ใน / etc / ssh / sshd_config เราพบว่าการทำ su - $ USER จากนั้นเรียกใช้หน้าจอหรือ nohup จะทำงานได้จากภายใน SSH แต่เข้าสู่ระบบโดยตรงผ่าน ssh แล้วเรียกใช้คำสั่งจะไม่ (ยกเว้นว่ามีการเปิดใช้งาน UsePAM) จะต้องมีฟีเจอร์ / hooks "ความปลอดภัย" ที่เพิ่มเข้ามาซึ่งทำให้ต้องเปิดใช้งาน

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