9

我想知道这两种语法在 bash:( &)( ) &.

我注意到的唯一区别是,(tty &)将返回“不是 tty”,而(tty) &将返回当前的 tty 名称,但为什么呢?

举个例子,我应该运行(setsid startx &)还是(setsid startx) &

4

1 回答 1

6

如果是

(tty &)

启动了一个子shell,它在没有作业控制和终端的情况下在后台启动另一个tty进程,因此出现“不是 tty”错误。tty进程与 PPID 1分离

如果是

(tty) &

子shell 启动并在后台运行。此后台shell 启动一个tty进程,在 tty 完成并向终端报告后,子 shell 在后台完成。

--

tty是一个简单的命令。特定命令(如startx)是否需要( ... &)构造才能与父进程分离/拒绝取决于命令本身。进程有多种方式依次启动子进程并将其分离,因此命令可能不需要它。

于 2014-03-16T16:36:58.293 回答