2009-06-09 4 views
3

Je veux limiter le temps d'exécution d'un programme que je cours sous Linux. Je mets dans mon script scons une ligne comme:Commande Scons avec limite de temps

Commande ("com", "", "ulimit -t 1; myprogram")

et testé avec un programme de boucle infinie: il n'a pas travail et le programme a couru pour toujours.

Ai-je raté quelque chose?

- tsf

Répondre

4

ulimit -t 1 signifie que la limite est fixée à 1 seconde de temps CPU. Si votre programme de boucle infinie utilise une sorte de sleep dans sa boucle interne, il n'utilisera pratiquement pas de temps CPU. Cela signifie qu'il ne sera pas tué dans 1 seconde de réel, sur l'horloge. En fait, cela peut prendre quelques minutes ou quelques heures pour utiliser son allocation d'une seconde. Que se passe-t-il si vous exécutez la commande en dehors de SCons? Peut-être que vous n'êtes pas autorisé à modifier la limite du tout ...

ulimit -t 1; ./myprogram 

Par exemple, il peut dire ce qui suit si la limite est déjà fixé à 0:

bash: ulimit: cpu time: cannot modify limit: Operation not permitted 

Edit: il semble que the -t option is broken on Ubuntu 9.04. Un correctif a été corrigé le 5 juin 2009, mais il peut s'écouler un certain temps avant qu'il ne soit corrigé. Il se peut qu'il ne soit pas corrigé avant le 9.10.

Comme note historique, ce problème n'existe plus dans Ubuntu 10.04.

+0

Mon programme boucle sans fin était quelque chose comme (en C): while (1) x = 1; afin qu'il n'y ait pas de sommeil dedans. - tsf – Tsf

+0

Il semble que ce n'est pas un problème de Scons! J'ai essayé ulimit -t 1; ./myprogram Cela a fonctionné (a été interrompu) sous une installation Linux Fedora mais n'a pas fonctionné sous Ubuntu. Je dois vérifier si cela dépend de la valeur de la configuration. Merci! – Tsf

+0

Ah! Je l'essayais sur openSuse et ça a marché. Sur Ubuntu ... rien. Pas d'erreur mais pas de tuer après 1 seconde non plus. – richq

Questions connexes