utilisation de setrlimit

utilisation de setrlimit - C - Programmation

Marsh Posté le 07-11-2008 à 19:57:06    

Bonjour a tous,  
 
dans le cadre d'un tp ( on programme un shell ), on doit fixer un delai souple CPU et un delai dur CPU au dela desquel un processus doit recevoir un signal SIGXCPU puis SIGKILL ( delai dur )
je le fixe avec setrlimit et ca marche
cependant je souhaite pouvoir moddifier ces delais et la non j'y arrive pas  
je modifier les valeurs des delais ( elles sont dans un structure rlimit ), elles sont correctement moddifiées puis j'appel a nouveau setrlimit et la badaboom les delai ne sont pas moddifiés je l'ai verifié a l'aide de getrlimit ...
 
quelqu'un aurait une idée?
 
je vous met en gros la structure du code :
 

Code :
  1. int main () {
  2.   while(1) { // boucle infini pour le shell
  3.       struct rlim limite; // structure pour les delai
  4.       .....
  5.      // je detecte que j'ai rentre la commande ulimit -t X ou X est soit un entier ou unlimited  
  6.      if(!strcmp(......) {     
  7.           ...
  8.           limite.rlim_cur=atoi(cmd[2]); // delai souple
  9.           // atoi permet de convertir une chaine de caracteres en un entier
  10.           limite.rlim_max=(int)limite.rlim_cur + 5; // delai dur
  11.           setrlimit(RLIMIT_CPU, & limite);
  12.      }
  13.     ......
  14.     // pas mal de ligne derriere ^^
  15.   }
  16. }


 
 
 :hello:  

Reply

Marsh Posté le 07-11-2008 à 19:57:06   

Reply

Marsh Posté le 14-11-2008 à 07:40:32    

Tu es sur que cmd[2] contient la valeur de X? Tu as fait un printf() pour voir si tu entrais bien dans ta condition if(!strcmp(......) ?
 
Sinon je comprends pas pourquoi tu castes limite.rlim_cur pour affecter limite.rlim_max, alors que atoi() renvoit un int. 'Fin je préfère préciser que je suis noob en la matière.


Message édité par h0taru le 14-11-2008 à 07:41:52
Reply

Marsh Posté le 14-11-2008 à 10:31:06    

Je suppose que tu executes le code en mode super utilisateur, sinon...

Citation :

struct rlim limite;

Tu as redéfini rlimit en rlim?
Les structures sont identiques?  
Parce que sinon, a l'appel de la fonction setrlimit, il n'est pas sur que les parametres soient trouvés la ou ils sont attendus.
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-11-2008 à 10:21:24    

h0taru je recupere bien les bonnes valeurs j'ai verifiée, je met egalement correctement a jour les valeurs de limite
le probleme vient du fait que je ne peux appele setrlimit qu'une fois, la premiere ca va marcher et apres non
bien sur si je ferme et relance mon shell je peux fixer une limite differente et ca va marcher ( normal puisque j'ai relancé mon programme ).
J'ai demandé a 2 profs ils m'ont toujours pas repondu, enfin si ils m'ont dit regarde dans le man la partie bug  :ange:

Reply

Marsh Posté le 15-11-2008 à 16:55:50    

Si le code n'es pas executé en mode super user, tu ne peux que diminuer la valeur de rlim_max.
Tu n'aurais pas essaye de diminuer puis réaugmenter cette valeur, dans tes tests, par hasard...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed