Salut tout le monde !
Apres avoir fait pas mal de recherches sur internet, je me permet de poster ici pour demander de l'aide !
Voici mon probleme :
Je suis en train de programmer en C/C++ un shell, qui doit se comporter a peu pres comme un shell unix classique,
c'est en fait un programme lancé a partir d'un shell et qui doit gerer qq fonctionnalités des shells , sans faire appel a la fonction system() bien entendu
Pour l'instant tout allait bien mais je suis tombé sur un os : la mise en place du job control
Je dois donc gerer le lancement en background de processus, malheuresement apres de longs et infructueux essais , j'en suis au meme point !
Lorsqu'un processus lancé en background demande l'acces en lecture au shell , il doit passer en "Suspended" . Et c la que je coince, comment faire ?
J'ai essayé de faire un dup2() de son entree standard sur /dev/null ou sur un pipe que lui seul utilise et le resultat est le meme : apres l'appel a execve(), le processus meurt . J'ai bien essayé de voir pourquoi en controlant les macros de waitpid() mais rien d'anormal
J'ai aussi essayé de chercher des explications pour savoir comment les vrais shell font mais je n'ai rien trouvé non plus, le man des shells bash et tcsh ne disent rien a ce sujet ...
J'ai aussi essayé d'intercepter les signaux SIGTTIN et SIGCHLD en vain ... cette saleté de processus meurt et je ne comprends pas pourquoi !
En fait je cherche juste un moyen de savoir si un processus donné tente un acces au terminal en lecture , et si c le cas pouvoir l'en empecher
Si qqn a une solution a proposer, ce serait vraiment sympa car je ne sais plus quoi faire ! Merci d'avance