为什么XMonad在新会话中运行子进程?

时间:2014-02-03 06:33:47

标签: session haskell launcher xmonad

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

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

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

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

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

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

  • fork进程(可能是为了防止进程成为组负责人,setsid系统调用所需);
  • 恢复默认的SIGPIPE和SIGCHLD(看起来像forkProcess行为解决方法);
  • 调用'createSession'(setsid syscall wrapper);
  • 执行'spawnPID'中构造的命令。

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

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

问题3:为什么forkProcess + executeFile甚至使用,而不是shell + createProcess或proc + createProcess?

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

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

0 个答案:

没有答案