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

kaw*_*hiu 9 bash subshell

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

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

举个例子,我应该跑步(setsid startx &)还是(setsid startx) &

Scr*_*zer 6

如果是

(tty &)
Run Code Online (Sandbox Code Playgroud)

一个子shell启动,它tty在后台启动另一个进程而没有作业控制和终端,因此存在"not tty"错误.该tty过程将与PPID 1分离

如果是

(tty) &
Run Code Online (Sandbox Code Playgroud)

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

-

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