仅当 Evince 首先启动时,Evince 才能可靠地打开 PDF,如果单击,挂起的 Evince 实例会导致系统冻结

仅当 Evince 首先启动时,Evince 才能可靠地打开 PDF,如果单击,挂起的 Evince 实例会导致系统冻结

在我的机器上(请参阅下面的详细信息)Evince 没有按预期打开文档,但这取决于所使用的方法。我指的两种方法是:

  • (A) 通过将文档作为目标来启动 Evince(例如,单击文档并使用“打开方式”和“Evince”)或者evince <target doc>从终端运行);
  • (B) 首先启动 Evince,没有文档,然后在 Evince 窗口中单击“打开...”或者将文档拖动到已打开的 Evince 窗口顶部(这将打开另一个包含新文档的 Evince 窗口)。

方法 A(大多数情况下)不起作用。这会导致进程挂起,我可以pgrep通过扩展坞中的图标看到该进程。htop表明这些进程几乎不使用 CPU 和内存。我可以正常终止这些进程。但是,如果我单击扩展坞中这些 Evince 实例的图标,我的系统会立即完全冻结(我无法打开tty),解决方案是通过电源按钮强制重新启动。

例外情况:方法 A 有时有效。我找到了(主要是但是或许不总是?我现在不确定)适用于一个小的(0.5 MB)PDF只有图像,没有文字。我发现它会有时还可以处理包含图像和文本的中等大小 (4 MB) PDF。在这种情况下,有时还会出现一个带有用于查看 PDF 的 UI 的窗口,但 PDF 不会出现。其他时候,进程会挂起或 PDF 会正常打开。我发现它无法在包含图像和文本的较大 PDF (6 MB) 上运行,而且我从未让它在仅包含文本而没有图像的小型 PDF (0.2 MB) 上运行。我还尝试了一个小(0.2 MB).ps 图像,但无法用方法 A 打开它。

方法 B(大部分)可以正常工作。

例外情况:如果挂起的进程已经在运行,方法 B 有时不起作用。也就是说,如果挂起的进程正在运行,我可以打开一个空的 Evince 窗口,但使用“打开...”或将文档拖到窗口上有时会打开该文档,有时则不会。

我的机器:

  • Ubuntu 20.04.6,64 位
  • 窗口系统:Wayland
  • 64 GiB 内存
  • 第 11 代英特尔处理器
  • 一些板载显卡:Mesa Intel XE (TGL GT2)
  • 2 TB SSD 空间,远未满

此外,我要补充一点,这并不总是一个问题。我以前可以完全正常使用 Evince。然而,在过去的某个时间点,这种行为开始出现,我只是避免使用 Evince,因为我无法确定可能发生了什么变化。

更多诊断:

我尝试strace在挂起的 Evince 进程上运行。我读到这可能会有所帮助,但我不明白任何输出:

strace: Process 12102 attached
restart_syscall(<... resuming interrupted read ...>) = 1
write(5, "\1\0\0\0\0\0\0\0", 8)         = 8
recvmsg(11, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l\4\1\1\21\0\0\0\373\5\0\0\205\0\0\0\1\1o\0\30\0\0\0/org/a11"..., iov_len=2048}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 169
write(5, "\1\0\0\0\0\0\0\0", 8)         = 8
recvmsg(11, {msg_namelen=0}, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable)
write(5, "\1\0\0\0\0\0\0\0", 8)         = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, 0) = 1 ([{fd=5, revents=POLLIN}])
read(5, "\3\0\0\0\0\0\0\0", 16)         = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, -1) = 1 ([{fd=11, revents=POLLIN}])
write(5, "\1\0\0\0\0\0\0\0", 8)         = 8
recvmsg(11, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l\4\1\1\21\0\0\0\375\5\0\0\205\0\0\0\1\1o\0\30\0\0\0/org/a11"..., iov_len=2048}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 169
write(5, "\1\0\0\0\0\0\0\0", 8)         = 8
recvmsg(11, {msg_namelen=0}, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable)
write(5, "\1\0\0\0\0\0\0\0", 8)         = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, 0) = 1 ([{fd=5, revents=POLLIN}])
read(5, "\3\0\0\0\0\0\0\0", 16)         = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, -1

我等了几分钟,没有写入任何额外的输出。我也跑了,netstat因为阅读这可能会有帮助,但我还是不明白输出。

$ netstat -p | grep 12102
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
unix  3      [ ]         STREAM     CONNECTED     150817   12102/evince         
unix  3      [ ]         STREAM     CONNECTED     149214   12102/evince         
unix  3      [ ]         STREAM     CONNECTED     149075   12102/evince         
unix  3      [ ]         STREAM     CONNECTED     149074   12102/evince         
unix  3      [ ]         STREAM     CONNECTED     149213   12102/evince         
unix  3      [ ]         STREAM     CONNECTED     151902   12102/evince

ls -l /proc/<proc id>/fd再次跑步,因为我读到它会有所帮助。在挂起的进程 (12102) 上,然后在终止该进程并在同一 PDF(进程 15795)上使用方法 B 后:

<me>@<my computre>:~$ ls -l /proc/12102/fd
total 0
lr-x------ 1 <me> <me> 64 Okt 11 18:37 0 -> /dev/null
lrwx------ 1 <me> <me> 64 Okt 11 18:37 1 -> 'socket:[149074]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 10 -> 'socket:[149214]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 11 -> 'socket:[151902]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 12 -> 'anon_inode:[eventfd]'
lr-x------ 1 <me> <me> 64 Okt 11 18:37 13 -> anon_inode:inotify
lr-x------ 1 <me> <me> 64 Okt 11 18:37 14 -> '/home/<me>/.local/share/gvfs-metadata/home (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:37 15 -> '/home/<me>/.local/share/gvfs-metadata/home-a9b0a1cb.log (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:37 16 -> /home/<me>/Downloads/<my document>.pdf
lrwx------ 1 <me> <me> 64 Okt 11 18:37 2 -> 'socket:[149075]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 3 -> 'socket:[149213]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 4 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 5 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 6 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 7 -> '/memfd:wayland-cursor (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 8 -> 'socket:[150817]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 9 -> 'anon_inode:[eventfd]'
<me>@<my computer>:~$ ls -l /proc/15795/fd
total 0
lr-x------ 1 <me> <me> 64 Okt 11 18:58 0 -> /dev/null
lrwx------ 1 <me> <me> 64 Okt 11 18:58 1 -> 'socket:[174829]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 10 -> 'socket:[177581]'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 102 -> '/home/<me>/.local/share/gvfs-metadata/root-5357d137.log (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 11 -> 'socket:[174831]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 12 -> 'anon_inode:[eventfd]'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 13 -> anon_inode:inotify
lr-x------ 1 <me> <me> 64 Okt 11 18:58 14 -> '/home/<me>/.local/share/gvfs-metadata/home (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 15 -> '/memfd:wayland-cursor (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 16 -> '/home/<me>/.local/share/gvfs-metadata/home-41fe52fb.log (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 17 -> /home/<me>/Downloads/<my document>.pdf
lrwx------ 1 <me> <me> 64 Okt 11 18:58 2 -> 'socket:[174829]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 3 -> 'socket:[177580]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 4 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 5 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 6 -> 'socket:[179272]'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 60 -> '/home/<me>/.local/share/gvfs-metadata/root (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 7 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 8 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 9 -> '/memfd:wayland-cursor (deleted)'

这对我来说看起来是一样的,只是后一个过程有两个“wayland 光标”行。

我将感谢您关于如何诊断此问题的所有建议。我通常会使用 Okular 处理 PDF,但我发现 Evince 更适合处理包含大图像的 PDF,并且我开始查看更多此类 PDF。另外,这个问题让我非常困惑,我想解决它。

相关内容