()&之间的区别和(&)?

时间:2014-03-16 03:35:32

标签: bash subshell

我想知道bash中这两种语法之间有什么区别:( &)( ) &

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

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

1 个答案:

答案 0 :(得分:6)

的情况下
(tty &)

启动一个子shell,它在后台启动另一个tty进程而没有作业控制和终端,因此存在“not tty”错误。使用PPID 1分离tty进程

的情况下
(tty) &

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

-

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