运行这些 shell 命令时:
SH1$ bash
SH2$ exec date &
[1] 375
SH2$ Mon Apr 22 15:04:36 BST 2013
[1]+ Done exec date
SH2$
&
优先于,exec
并让 SH2 进程继续运行(在 ksh 和 Solaris /bin/sh 中结果相同)。
为什么是这样?它是明确定义(或必需)的行为,还是留给每个实现?
是的,这是标准行为。请参阅POSIX shell 语法,并注意exec
甚至没有明确涵盖;它被视为普通的cmd_name
.
exec 替换当前 shell 并执行命令
exec date
有效地运行日期并退出,让你“失去”你原来的外壳
exec date &
在子进程中运行 exec。这是 & 运算符的定义行为。结果与
( exec date )
& 和 ( ) 都创建一个新的子进程,然后在新进程的上下文中执行命令。