额外的子进程挂起各种应用程序

额外的子进程挂起各种应用程序

Ubuntu Studio 16.04,联想笔记本电脑。

有时当我从 (1) 主应用程序菜单、(2) 右键单击​​文件(“打开方式...”)或 (3) 命令行启动应用程序时,应用程序挂起。(挂起的应用程序有:Firefox、Thunderbird、LibreOffice。)

查看进程树后,我发现在所有情况下,请求的应用程序都生成了一个子进程。例如:

~$ ps aux | grep thunderbird
jga       7420  2.2  2.5 618832 99864 ?        Sl   22:24   0:00 /usr/lib/thunderbird/thunderbird
jga       7424  0.1  0.7 378240 31344 ?        S    22:24   0:00 /usr/lib/thunderbird/thunderbird
jga       7452  0.0  0.0  14224   928 pts/1    S+   22:24   0:00 grep thunderbird

(并且 pstree 确认了 7420 和 7424 之间的父子关系。)

如果我终止子进程,父进程就会正常启动。

这是 Libre Office 所做的事情。

~$ libreoffice --calc &
[2] 7792
[1]   Done                    libreoffice --calc
~$ #hanging...
~$ ps aux | grep office
jga       7792  0.1  0.1 207860  5764 pts/1    Sl   22:52   0:00 /usr/lib/libreoffice/program/oosplash --calc
jga       7809  0.4  1.4 607036 58752 pts/1    Sl   22:52   0:00 /usr/lib/libreoffice/program/soffice.bin --calc --splash-pipe=5
jga       7810  0.0  0.6 406804 24200 pts/1    S    22:52   0:00 /usr/lib/libreoffice/program/soffice.bin --calc --splash-pipe=5
jga       7815  0.0  0.0  14224  1028 pts/1    S+   22:53   0:00 grep office
~$ kill -9 7810
~$ # Spreadsheet comes up.

但是,如果我在前台启动该进程-就不会挂起。

那么到底发生了什么?我最近对系统所做的唯一修改是将注释添加到面板中,但后来我又将其删除了。

使用工具箱,我在 Firefox 和 libreoffice 上运行了 strace。例如strace -ff -o /tmp/loffice libreoffice --calc

在这两种情况下,挂起的子进程都有以下共同特征:

  • 打开 /etc/drirc 进行读取
  • 检查 ~/.drirc 是否存在(不存在)
  • 系统调用写入某个句柄,但最终挂起,例如

    ioctl(5, DRM_IOCTL_I915_GEM_CREATE, 0x7ffd90290680) = 0
    ioctl(5, _IOC(_IOC_READ|_IOC_WRITE, 0x64, 0x5e, 0x28), 0x7ffd90290630) = 0
    ioctl(5, DRM_IOCTL_I915_GEM_SET_DOMAIN, 0x7ffd90290630) = 0
    ioctl(5, DRM_IOCTL_I915_GEM_SET_DOMAIN <unfinished ...>
    

快速访问 Goog 后我发现 drirc 与渲染相关,并且我想起我短暂安装 Notes Panel 应用程序时第一次在安装中看到半透明窗口。

那么,有关系吗?发生了什么事?

相关内容