首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

並行程序對返回值獲取的影響及正確處理

     編輯:程式設計疑難解答

問題本質

用戶關心:兩個獨立程序(進程)並發運行時,echo $? 獲取的退出碼是否會相互干擾?

核心結論

不會干擾。 每個進程擁有獨立的退出碼,Shell 變量 $? 只保存最近一次前台命令的退出狀態。兩個並行程序的退出碼互不影響,關鍵在於如何正確等待並捕獲特定進程的退出碼。

常見誤區與正確做法

錯誤做法後果正確做法
啟動後不等待,直接查 $?獲取的是上一條命令(如啟動命令本身)的退出碼使用 wait PID 等待特定進程
並行啟動多個後台任務,只 wait 一次只能獲取第一個結束任務的退出碼逐個 wait PID 或用 wait 循環收集所有
假設先啟動的先結束調度不確定,可能導致邏輯錯誤不依賴執行順序,以 PID 為唯一標識

Shell 腳本最佳實踐

#!/bin/bash
# 啟動兩個獨立任務
./program1 & pid1=$!
./program2 & pid2=$!

# 等待並記錄各自退出碼
wait $pid1; ret1=$?
wait $pid2; ret2=$?

echo "Program1 exited with: $ret1"
echo "Program2 exited with: $ret2"

# 根據業務邏輯判斷整體成功與否
if [ $ret1 -eq 0 ] && [ $ret2 -eq 0 ]; then
    exit 0
else
    exit 1
fi

C++ 程序內部並行

若在單一進程內使用 std::thread 或 std::async,主線程可通過 future::get() 或 thread::join() 獲取返回值/異常,互不干擾。進程級返回碼僅由 main 的返回值或 exit() 參數決定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved