Quavo Asked: 2022-06-03 14:18:07 +0800 CST2022-06-03 14:18:07 +0800 CST 2022-06-03 14:18:07 +0800 CST 有没有一种简单的方法可以在 Linux 上运行同一个 C++ 程序的多个实例? 772 我有一个 C++ 程序,我想在 Linux 机器上并行运行,每个实例都是一个完全独立的进程,不与其他进程通信。是否有一种简单的方法来执行以下操作: 计算当前机器上的 CPU 内核数。 对于 CPU 内核的数量,运行程序的一个实例,将每个实例分配给一个内核。 定期检查实例是否仍在运行,并在必要时重新启动。 cpu process 2 个回答 Voted Best Answer larsks 2022-06-03T18:35:58+08:002022-06-03T18:35:58+08:00 计算当前机器上的 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你试图运行的任何命令替换命令。 Thibault LE PAUL 2022-06-29T23:34:08+08:002022-06-29T23:34:08+08:00 yes 3 | parallel sleep 这将无限期地运行与sleep 3处理器一样多。 或者本着另一个答案的精神,但更简单: for ((i=$(nproc);i>0;i--)) ; do while true ; do sleep $(( 1+RANDOM%10 )) done & done
有多种特殊文件和命令可提供此信息,也有一些方法可以通过编程方式完成此操作。最后一个链接可能是最好的选择,因为它考虑了 CPU 关联设置。
这听起来像是一个循环
fork
和exec
。您可以使用
wait
系统调用来查看您的任何子进程是否已退出,如果是,则启动一个新实例。上述解决方案可以让您通过编写一些额外的 C/C++ 代码来满足您的要求。您可以在 shell 脚本中应用相同的原则。以下脚本
sleep
每个核心运行一次非常有趣的命令,确保在命令退出时启动新命令以保持运行sleep
命令的数量不变:你可以做这样的事情,用
sleep
你试图运行的任何命令替换命令。yes 3 | parallel sleep
这将无限期地运行与
sleep 3
处理器一样多。或者本着另一个答案的精神,但更简单: