在生成外部程序时调用setpgid / setsid

时间:2012-12-05 16:28:11

标签: linux process posix process-group

从我的代码运行外部程序时,我有以下三个选项:

  1. fork()之后不执行任何操作。外部程序将在其父进程组中。
  2. 调用setpgid(0, 0)或类似内容,以便外部程序获得自己的进程组。
  3. 调用setsid(),它还将外部程序与其父控制tty分开。
  4. 上述哪种行为在哪些情况下是正确的?

    例如,我看到使用vim和gnome-open的一个有趣的行为:

    1. 我运行:!gnome-open somefile.pdf,启动PDF查看器并立即返回。
    2. 然后我运行:!cat,当cat正在运行时,使用SIGQUIT发送CTRL-\
    3. PDF查看器崩溃。发生这种情况是因为vim和gnome-open似乎都在自己的进程组中生成了子进程。

      被称为bug可能过于模糊,但我仍然想知道谁在这里有过错:vim或gnome-open是否有任何理由不在分叉后调用setpgid,就像shell会这样做? gnome-open调用setsid而不是将X应用程序与其启动的终端分开会更有意义吗? (我觉得奇怪的是,GLib没有提供标准和跨平台的方式来做这些事情。)

0 个答案:

没有答案