Process
有沒有一種簡單的方法可以在 Linux 上執行同一個 C++ 程序的多個實例?
我有一個 C++ 程序,我想在 Linux 機器上並行執行,每個實例都是一個完全獨立的程序,不與其他程序通信。是否有一種簡單的方法來執行以下操作:
- 計算目前機器上的 CPU 核心數。
- 對於 CPU 核心的數量,執行程序的一個實例,將每個實例分配給一個核心。
- 定期檢查實例是否仍在執行,並在必要時重新啟動。
計算目前機器上的 CPU 核心數。
有多種特殊文件和命令可提供此資訊,也有一些方法可以通過程式方式完成此操作。最後一個連結可能是最好的選擇,因為它考慮了 CPU 關聯設置。
對於 CPU 核心的數量,執行程序的一個實例,將每個實例分配給一個核心。
這聽起來像是一個循環
fork
和exec
。定期檢查實例是否仍在執行,並在必要時重新啟動。
您可以使用
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
你試圖執行的任何命令替換命令。