等待命令是进程管理命令之一。 Linux 中有不同的进程命令,主要有 5 个命令被广泛使用,它们是ps 、 wait 、 sleep 、 kill 、 exit 。
ps是进程状态的首字母缩写词。它显示有关活动进程的信息。 wait命令将暂停调用线程的执行,直到其子线程之一终止。它将返回该命令的退出状态。 sleep命令用于将下一个命令的执行延迟给定的秒数、小时数、分钟数、天数。 kill用于终止后台运行的进程。它向进程发送终止信号,然后进程停止。它以进程 ID 作为参数。 exit命令用于退出当前的 shell 环境。
让我们举一些例子来了解更多关于等待命令的信息:
wait是 Linux shell 中的一个内置命令。它等待进程改变其状态,即等待任何正在运行的进程完成并返回退出状态。
句法:
wait [ID]
这里,ID 是一个PID (进程标识符),它对于每个正在运行的进程都是唯一的。要查找进程的进程 ID,您可以使用以下命令:
pidof [process_name]
示例:查找 VLC(视频播放器)的 PID
这里,VLC 是进程名称。 3868 是它的进程 ID。
方法:
- 创建一个简单的过程。
- 使用特殊变量($!)查找该特定进程的 PID(进程 ID)。
- 打印进程 ID。
- 使用带有进程 ID 作为参数的wait命令等待进程完成。
- 进程完成后打印进程 ID 及其退出状态。
注意:存在状态 0 表示该进程已成功执行,没有任何问题。 0 以外的任何值都表示该过程尚未成功完成。
脚本:
#!/bin/bash
# creating simple process that will create file and write into it
cat > GEEKSFORGEEKS.txt <<< "Something is going to save into this file" &
# this will store the process id of the running process
# $! is a special variable in bash
# that will hold the PID of the last active process i.e. creating a file.
pid=$!
# print process is running with its PID
echo "Process with PID $pid is running"
# Waiting untill process is Completed
wait $pid
# print process id with its Exit status
# $? is special variable that holds the return value of the recently executed command.
echo "Process with PID $pid has finished with Exit status: $?"
输出:
在这里,我们正在创建一个进程,该进程将使用给定的字符串创建一个文件并将其存储到存储设备中。然后使用一个特殊的变量“ $!”我们将该进程的 PID 存储到另一个变量 pid 中。然后我们显示进程ID 并使用wait命令等待进程完成。进程执行后,我们将返回进程的退出状态代码及其 PID。如果退出状态码为 0,那么我们可以说进程执行成功。
对于多个进程:
方法:
- 创建多个进程。
- 创建一个文本文件并写入其中。
- Sleep 2 将暂停 shell 2 秒钟。
- 再次创建一个文本文件并写入其中。
- 显示我们正在运行多个进程。
- 使用wait -f等待,直到上述所有过程都成功执行。
- 该过程完成后,我们将使用特殊变量$? .
脚本:
#!/bin/bash
# creating multiple processes
cat > Geeks.txt <<< "GeeksGeeks" &
sleep 2 &
cat > something_new.txt <<< "Something new is created" &
echo "Mutliple processes are running"
# using wait to wait for the processes to finish
# -f will wait untill all the processes is executed.
wait -f
#printing process Exit status
# $? is special variable that holds the return value of the recently executed command.
echo "All Processes end with Exit status: $?"
输出:
在这里,我们正在创建 3 个进程。然后我们简单地使用wait命令来等待所有进程完成。 -f用于在返回退出代码之前等待所有进程完成。之后,我们只需使用特殊变量“$?”打印这些进程的退出状态。