在shell脚本中,$!表示后台进程的进程ID。

10

在bash/shell脚本中是否存在$!,如果存在,请告知它的用途。为什么在命令行上运行echo $!时会显示空白?


我想知道为什么上面那个被踩了(并关闭了),而这个却值得点赞! - devnull
3个回答

11

除了其他答案外,此回声

echo $!

如果您当前的shell中还没有运行任何后台进程,则会打印空白。如果您现在运行:

date &
echo $!

那么它将打印类似以下内容(即最后执行的后台进程的进程ID):

47833

8

$!是您的shell在后台运行的最后一个程序的PID


有任何想法吗,它是如何得到最后被杀死或完成的后台进程的PID的? - pRAShANT
2
@pRAShANT 没有简单的方法。您可以使用所选数组类型记录运行的所有进程,然后使用 SIGCHLD 陷阱处理程序在每次终止/杀死进程时触发,然后检查哪个进程不再存在。该方法并不准确,特别是如果两个进程同时终止。通过 /prockill -s 0 等检查进程是否仍存在也很慢。而且我不确定通过作业控制进行进程管理是否总是可行或高效,以至于它不会漏掉任何东西。 - konsolebox

0

$! - 显示最近在后台启动的进程 ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接