Shell:使命令进入单独的进程组

Shell:使命令进入单独的进程组

当使用具有作业控制功能的 shell 时,每个管道通常被放入其自己的进程组中。

当从交互式程序(例如编辑器)生成子进程时,子进程通常会与编辑器位于同一进程组中。这意味着当编辑器进入后台时,子进程也会停止。

如果子进程本身就是一个图形程序,例如 PDF 查看器,则这是不希望的okular

在这种情况下调用的正确策略是(使用vi语法)

:!set -m;okular %.pdf&

即,在将查看器作为后台进程调用之前强制子 shell 启用(作业)监视器选项? (子 shell 在由 调用时不是交互式的system(),因此默认情况下监视选项处于关闭状态。)

答案1

是的,set -m是一种方式。我想不出一种需要更少打字的方法(无需事先准备)。

在 Linux 上,另一种方法是在命令前面加上setsid.它不仅在单独的进程组中运行该命令,而且还在单独的会话中运行该命令,在这种情况下这不太重要。打字量相同,但标点符号更少,因此可能更方便。

另一种方法是运行中间交互式 shell。不过打字还是挺别扭的。

setsid okular %.pdf&
set -m;okular %.pdf&
sh -ic 'okular %.pdf'&

相关内容