我编写了一个 shell 脚本来启动多个后台作业,并使用 将它们的进程 ID 存储在数组中$!
。最后,我通过遍历数组打印所有进程 ID。我想知道编写的 shell 脚本是否有错误?而且,我觉得我的 shell 脚本中有错误的原因是,$!
如果在我的 PC 中创建了多个进程,它可能会返回另一个进程的进程 ID。
#!/bin/bash
ps -a & pids+=($!) #Does $! return process id of command ps -a for sure
ls -la & pids+=($!) #Does $! return process id of command ls -la for sure
echo ${pids[0]}
echo ${pids[1]}
$!
“扩展到最近执行的后台(异步)命令的进程 ID”(来源:bash 手册)该变量是当前 shell 实例的本地变量,因此当前 shell 脚本/会话之外发生的任何事情都与之无关。
如果在后台放置两个进程:
然后
$!
将包含最后一个后台进程的 PID(在本例中为ls -la
)。