Bonjour,

Je suis actuellement en train de réaliser un mini-Shell en Python en y incorporant quelques fonctions usuelles à l'aide d'appels système (ls, cd, launch etc).

Mon problème se situe au niveau de la commande launch. Pour info cette fonction est la fonction centrale de mon shell. C'est elle qui lancera la plupart des commande. Concrètement, je fais appel à la fonction fork pour créer un sous-processus. Comme ce sera un clone du processus actuel, je demande au fils de vérifier si c'est un utilitaire qui est demandé (un petit fichier importé avec différentes petites fonctions), sinon de remplacer son code par celui du programme appelé à l'aide de exec. Le père, lui aura juste à attendre que le fils ait fini, à l'aide de wait, sauf s'il y a un &.

Je vous mets le bout de code pour y voir plus clair :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
import os
import utilitaires
 
def launch (args) :
    fpid=os.fork() #Clonage du processus, on se retrouve avec 2 processus identiques, sauf que pour le fils aura fpid=O
    if fpid==0: #Si je suis le fils
    	launch_commande (args)
    os._exit(fpid)   
    if args[-1]!="&": #Si ça termine pas par &
        os.wait() #Attendre la fin du fils
 
Pour la commande auxiliaire launch_commande():
 
def launch_commande (args) :
    if args in utilitaires.dico :
        utilitaires.dico[args[0]](args) # Si la fonction se trouve déjà dans l'utilitaire, l'exécuter depuis celui-ci.
    else :
        os.execv(chemin,args) # Sinon on l'exécute avec execv
Lors du lancement de l'application le programme ne répond pas. J'ai dû faire une erreur quelque part, peut-être au niveau de la commande launch_cmd().

Si quelqu'un a une idée ça serait sympa, merci !