命令可以使当前
shell进程挂起,等待所指定的由当前
shell产生的子进程退出后,
wait命令才返回。
wait命令的参数可以是进程
ID或是
job,下面良许教程网为大家分享一下Linux bash wait命令具体使用方法。
Bash wait
命令
wait
内置的一般语法采用以下形式:
wait [options] ID
Copy
ID
是进程或任务ID。 如果没有指定ID
,则命令等待所有后台任务直到完成。
wait
命令返回wait
的最后一个命令的退出状态。
例如,要wait
PID 7654
的后台进程,您将使用:
wait 7654
Copy
当给出多个进程时,命令等待所有进程完成。
使用jobspec指定作业,这是一种引用构成作业的进程的方法。 Jobspec以百分比符号开始,后跟作业编号(%n
)。 这是一个 的ded例子:
rsync -a /home /tmp/home &
Copy
shell作业ID(括号括起来)和进程ID将显示在终端上:
[2] 54377
Copy
等待作业,运行wait
命令后跟Jobspec:
wait %2
Copy
在使用-n
选项中调用时,命令仅在指定的PID或Jobspecs中仅等待单个作业完成并返回其退出状态。 如果没有提供参数,wait -n
等待任何后台作业完成并返回作业退出状态。
wait -n 45432 54346 76573
Copy
在上面的示例中,wait -n
仅打印首先退出的作业的返回状态; 它没有显示进程的PID。 如果要获取返回退出状态的进程PID或Jobspec,请使用-p
选项将其分配给变量:
wait -p job_id -n 45432 54346 76573
Copy
-p
选项在BASH 5.1中引入。 如果使用较旧的BASH版本,您将获得“invalid option”错误。
-f
选项告诉wait
等待每个PID或JOBSPEC在返回其退出代码之前终止,而不是在更改作业状态时返回。 启用作业控件时,此选项仅有效。 默认情况下,仅为交互式提示启用作业控件。
例子
wait
通常用于shell脚本生成并行执行的子进程。
为了说明命令如何工作,创建以下脚本:
#!/bin/bash sleep 30 & process_id=$! echo "PID: $process_id" wait $process_id echo "Exit status: $?"
Copy
让我们按行解释代码行:
-
第一行称为shebang,它告诉操作系统使用哪个解释器来解析文件的其余部分。
-
使用sleep命令来模拟一个耗时的后台进程。
-
$!是Bash内部变量,用于在后台存储上一次运行的进程的PID。 在此示例中,这是sleep命令的PID。 我们将PID存储在变量(process_id)中。
-
打印PID号。
-
PID传递给
wait
命令,该命令等待直到睡眠命令完成。
打印wait
命令的退出状态。 $?是内部Bash变量,用于保存最后执行的命令的退出状态。
如果您运行脚本,它将打印这样的内容:
PID: 36353 Exit status: 0
Copy
这里使用-n
选项的示例:
#!/bin/bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "First job completed." wait echo "All jobs completed."
Copy
执行脚本时,它会产生3个后台进程。 wait -n
等待直到完成第一个作业并打印echo语句。 wait
等待所有后台任务完成。
first job completed all jobs completed
Copy
最后一个示例说明-f
选项。 打开终端并运行:
sleep 3600 &
Copy
[1] 46671
Copy
等待这个进程:
wait 46671
Copy
打开另一个终端并使用
命令停止进程:kill -STOP 46671
Copy
一旦改变了进程状态,wait
命令将完成并返回进程退出代码。
现在,重复相同的步骤,但这一次使用wait -f $pid
:
sleep 3600 & wait -f 46671
Copy
停止另一个终端的进程:
kill -STOP 46671
Copy
这次wait
命令将无法完成。 它将在sleep
进程终止之前运行。
总结
综上所述wait
命令主要的作用就是等待指定的进程完成并返回进程的退出代码,大家如果对wait
以上就是
为各位朋友分享的 相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多 等着你!