Linux wait命令教程与详解
source link: https://www.myfreax.com/bash-wait/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Linux wait命令教程与详解
wait命令是一个等待指定进程完成,当进程状态发生变化后,返回的进程的退出状态
bash wait命令
wait命令是一个等待指定进程完成的命令,当进程状态发生变化后,wait命令返回的进程的退出状态。
由于wait
命令影响当前Shell执行,因此它在大多数shell中是内置命令。在本教程中,我们将探讨Bash内置wait
命令。
wait 命令详解
shell内置的wait
命令的语法形式是wait [options] ID
。options
wait命令的选项,可选参数,ID
是进程或任务ID。
如果没有指定ID
,wait命令等待所有进程状态改变。并返回的最后一个进程的退出状态。
例如命令wait 7654
,等待PID 7654
的后台进程直到退出。当指定多个进程时,wait
命令等待所有进程状态改变。
wait 7654
wait 命令作业任务
使用jobspec指定作业ID,这是一种引用作业进程的方法。以百分比符号开始,后跟作业编号。
例如命令rsync -a /home /tmp/home &
启动进程在后台复制目录的所有内容到临时目录/tmp/home
并在终端打印括号括起来的作业ID和进程ID ,例如[3] 54377
。
要等待rsync命令的作业,可以运行命令wait %3
,注意这里指定的不是进程的PID,而是作业ID。
rsync -a /home /tmp/home & #[3] 311013
wait %3
[2] 54377
wait 命令等待后台进程
在使用wait
命令的-n
选项时,如果指定多个进程的PID或者作业ID给wait
命令,wait
命令仅返回第一个进程的退出状态。
如果没有提供进程PID或者作业ID,wait -n
命令等待所有后台进程完成并返回退出状态。
如果你还想打印进程的PID,请使用wait
命令的-p
选项。-p
选项在BASH 5.1版本引入。如果使用较旧的BASH版本,您将获得invalid option错误。
wait -n 45432 54346 76573
wait -p -n 45432 54346 76573
wait 命令实例
wait
命令通常用于Shell脚本生成并行执行的子进程。为了说明wait命令如何工作,创建test.sh脚本。
#!/bin/bash
sleep 30 &
process_id=$!
echo "PID: $process_id"
wait $process_id
echo "Exit status: $?"
test.sh!/bin/bash
称为shebang,它告诉操作系统使用哪个解释器来解析文件的其余部分。sleep 30 &
使用sleep
命令模拟一个耗时的后台进程。
process_id=$!
声明变量process_id
并保存sleep
命令的进程PID,$!
是Bash内部变量,用于存储上一次运行进程的PID。echo "PID: $process_id"
打印sleep
命令PID号。
wait $process_id将sleep命令进程的PID传递给wait
命令,wait
命令将一直等待,直到sleep
命令的完成。
echo "Exit status: $?"
打印wait
命令的退出状态。 $?
是Bash内部变量,用于保存最后运行的命令的退出状态。如果您运行脚本,它将打印这样的内容。
PID: 36353
Exit status: 0
waitn.sh使用wait命令的-n
选项示例,执行脚本时,它会产生3个后台进程。 wait -n
等待第一个作业完成。wait
等待所有后台任务完成。
#!/bin/bash
sleep 3 &
sleep 30 &
sleep 5 &
wait -n
echo "First job completed."
wait
echo "All jobs completed."
waitn.shfirst job completed
all jobs completed
最后一个示例说明wait
命令的-f
选项。使用快捷键CTRL+ALT+T
打开终端并运行命令sleep 3600 &
创建一个后进程。
然后运行命令wait 46671
等待这个进程,最后打开另一个终端并使用kill
命令停止进程。
当终止进程46671后,wait
命令完成等待并返回进程的退出代码。
sleep 3600 & #[1] 46671
wait 46671
kill -STOP 46671 #在另一个终端
现在,重复相同的步骤,但这一次使用wait -f $pid
。停止另一个终端的进程,这次wait
命令将无法完成。 它将在sleep
进程终止之前运行。
sleep 3600 & # [2] 308313
wait -f 308313
kill -STOP 308313
wait
命令等待指定的进程完成并返回进程的退出代码。如果您有任何问题或反馈,请随时留下评论。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK