1

我对 XMonad 运行程序程序有一些疑问。我希望这些问题的答案也能解释在 X 环境中运行应用程序的“规范”方式。

XMonad 使用函数“ spawn ”来运行终端模拟器和程序启动器(例如 gmrun)。

这个函数调用'spawnPID',它构造了'/bin/sh cmd'命令。

问题一:为什么我们需要执行'/bin/sh -c cmd',而不是简单的'cmd'?

我的假设:用于解析参数,可以添加到 xmonad.hs 中的命令中。

更远。对于执行构造命令 'spawnPID' 称为 'xfork' 函数,其中:

  • fork 进程(可能是为了防止进程成为组长,setsid 系统调用需要);
  • 恢复默认的 SIGPIPE 和 SIGCHLD(看起来像 forkProcess 行为解决方法);
  • 调用“createSession”(setsid 系统调用包装器);
  • 执行在“spawnPID”中构造的命令。

问题 2(主要):为什么 XMonad 在它自己的会话中执行每个子进程?

在我看来,会话主要与用户登录会话或“用户独立”程序相关联,即。e. 守护进程。不是在一个登录会话下的每个单独的程序。

问题3:为什么连forkProcess+executeFile都用到了,而不是shell+createProcess或者proc+createProcess?

'forkProcess' 似乎已部分弃用(在某些情况下,在多处理器系统下,请参阅),但在这种情况下,'createProcess' 必须正常工作,并且支持在 shell 下执行而无需键入 '/bin/sh -c'。

这可能是处理执行程序的更好方法。但我对此并不专业,只是简单地阅读了文档。

4

0 回答 0