我想知道bash中这两种语法之间有什么区别:( &)
和( ) &
。
我注意到的唯一区别是,(tty &)
将返回“not tty”,而(tty) &
将返回当前的tty名称,但为什么?
举个例子,我应该运行(setsid startx &)
还是(setsid startx) &
?
答案 0 :(得分:6)
在
的情况下(tty &)
启动一个子shell,它在后台启动另一个tty
进程而没有作业控制和终端,因此存在“not tty”错误。使用PPID 1分离tty
进程
在
的情况下(tty) &
子shell启动并在后台运行。此后台shell启动tty
进程,在tty完成并向终端报告后,子shell将在后台完成。
-
tty
是一个简单的命令。特定命令(如startx
)是否需要( ... &)
构造从父进程分离/废弃取决于命令本身。进程可以通过多种方式依次启动子进程并将其分离,因此命令可能不需要它。