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

如何获取pid并处理最后一个shell命令的exist代码,shell,Shell,我知道!能给我最后一个命令的pid,和$?将给我上一个命令的退出值,但如何在一个shell命令中同时获得这两个值?谢谢简短回答 不可能在一个命令中同时获得PID和退出状态。您至少需要两个命令:一个用于保存PID($!),另一个用于等待并获取退出代码($?) 说明 根据报告: 扩展为从当前shell执行的最新后台命令(请参见列表)的十进制进程ID 所以$没有扩展到“最后一个命令的PID”,例如,您需要在命令之后使用&安排一个命令在后台执行 在命令退出之前,不可能获取它的退出代码——我们需要等待。w

我知道!能给我最后一个命令的pid,和$?将给我上一个命令的退出值,但如何在一个shell命令中同时获得这两个值?谢谢

简短回答

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

说明

根据报告:

扩展为从当前shell执行的最新后台命令(请参见列表)的十进制进程ID

所以<代码>$
没有扩展到“最后一个命令的PID”,例如,您需要在命令之后使用
&
安排一个命令在后台执行

在命令退出之前,不可能获取它的退出代码——我们需要等待。
wait
命令

返回最后一个ID的状态;如果ID无效或 给出了一个选择

(其中,
ID
是传递给命令的最后一个位置参数。)

示例

ls >/dev/null 2>&1 &

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

简短回答

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

说明

根据报告:

扩展为从当前shell执行的最新后台命令(请参见列表)的十进制进程ID

所以<代码>$
没有扩展到“最后一个命令的PID”,例如,您需要在命令之后使用
&
安排一个命令在后台执行

在命令退出之前,不可能获取它的退出代码——我们需要等待。
wait
命令

返回最后一个ID的状态;如果ID无效或 给出了一个选择

(其中,
ID
是传递给命令的最后一个位置参数。)

示例

ls >/dev/null 2>&1 &

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

试试:
命令&;echo$!&echo$?
。请尝试:
命令&;echo$!&echo$?