如何获取pid并处理上一个shell命令的exist代码

tjvv9vkg  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(138)

我知道$!会给予我最后一个命令的pid和$?会给予我最后一个命令的退出值,但我如何在一个shell命令中获得它们?谢谢

ql3eal8s

ql3eal8s1#

简答

不可能在一个命令中同时获得PID和退出状态。您至少需要两个命令:一个保存PID($!),另一个保存wait并获取退出代码($?)。

说明

根据文件:
!扩展到从当前shell执行的最新后台命令的十进制进程ID(请参阅列表)。
所以$!没有被扩展为“最后一个命令的PID”,例如,您需要在命令之后使用&来调度命令以在后台执行。
在命令退出之前,不可能获得它的退出代码--我们需要waitwait命令
返回最后一个ID的状态;如果ID无效或给出的选项无效,则失败。
(其中ID是传递给命令的最后一个位置参数。)

示例

ls >/dev/null 2>&1 &

pid=$!
wait $pid
exit_code=$?
printf 'PID: %d Exit code: %d\n' $pid $exit_code

注意$!
扩展为最近的后台命令的十进制进程ID
有关$!$?等特殊shell参数的信息,请参阅Shell命令语言特殊参数。

相关问题