web-dev-qa-db-fra.com

Comment exécuter un programme avec un seul cœur de processeur?

J'essaie d'exécuter une série de scripts liés à un serveur de jeu dans Terminator. Le seul problème est que lorsque je le fais, Terminator détecte tous les cœurs de mon processeur et les retards du PC. Y a-t-il un moyen de le démarrer mais je le fais croire que je n'ai qu'un seul cœur de processeur?

27
user245115

Ce n'est pas terminator qui effectue la "propagation" sur tous les processeurs d'un processus donné. Linux lui-même (le noyau) le fait. Une tâche (processus) est planifiée comme disponible pour être exécutée par défaut sur tous les processeurs; s'il utilise des threads, il peut utiliser plus d'un processeur à la fois.

Pour limiter un processus à une CPU spécifique, utilisez la commande taskset.

taskset --cpu-list 1,2 my_command 

Cette commande force my_command à s'exécuter uniquement sur les CPU n ° 1 ou n ° 2.

Pour en savoir plus, tapez man taskset ou recherchez "affinité du processeur linux" (premier résultat ici ).

43
Rmano

Bien qu'une autre réponse ait déjà donné la réponse littérale, j'explorerais la possibilité que cela ne soit pas fait de la bonne façon. Au lieu de cela, vous devez exécuter un script que vous ne souhaitez pas ralentir (par exemple des scripts non interactifs) à l'aide de la commande Nice.

Pour ce faire, il suffit de préfixer la commande que vous souhaitez exécuter avec Nice, par exemple: Nice command_to_run Ceci entraînera une dé-hiérarchisation du programme par rapport aux autres tâches et ne ralentira pas votre ordinateur. J'utilise souvent cette technique lors d'une compilation longue qui autrement ralentirait mon PC, cela a l'avantage de permettre au programme d'utiliser tous les cœurs lorsque la machine n'est pas occupée, mais l'arrêtera rapidement de les utiliser lorsque vous exécutez quelque chose. autre.

5
Vality