Process

有沒有一種簡單的方法可以在 Linux 上執行同一個 C++ 程序的多個實例?

  • June 3, 2022

我有一個 C++ 程序,我想在 Linux 機器上並行執行,每個實例都是一個完全獨立的程序,不與其他程序通信。是否有一種簡單的方法來執行以下操作:

  1. 計算目前機器上的 CPU 核心數。
  2. 對於 CPU 核心的數量,執行程序的一個實例,將每個實例分配給一個核心。
  3. 定期檢查實例是否仍在執行,並在必要時重新啟動。

計算目前機器上的 CPU 核心數。

有多種特殊文件和命令可提供此資訊,也有一些方法可以通過程式方式完成此操作。最後一個連結可能是最好的選擇,因為它考慮了 CPU 關聯設置。

對於 CPU 核心的數量,執行程序的一個實例,將每個實例分配給一個核心。

這聽起來像是一個循環forkexec

定期檢查實例是否仍在執行,並在必要時重新啟動。

您可以使用wait系統呼叫來查看您的任何子程序是否已退出,如果是,則啟動一個新實例。


上述解決方案可以讓您通過編寫一些額外的 C/C++ 程式碼來滿足您的要求。您可以在 shell 腳本中應用相同的原則。以下腳本sleep每個核心執行一次非常有趣的命令,確保在命令退出時啟動新命令以保持執行sleep命令的數量不變:

#!/bin/bash

numprocs=$(nproc)
echo "There are $numprocs cores available"

while true; do
   sleep $(( RANDOM % 10 )) &
   (( running++ ))
   echo "running=$running"

   if (( running >= $numprocs )); then
       wait -n -p pid
       (( running-- ))
       echo "$pid stopped"
   fi
done

你可以做這樣的事情,用sleep你試圖執行的任何命令替換命令。

引用自:https://unix.stackexchange.com/questions/704805