CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C/shell]Interpréter la commande echo $$

ptibiscuit32
ptibiscuit32
Niveau 13
07 mars 2014 à 18:24:58

Bonsoir j'ai un exercice à faire et je suis un peu perdu pour le moment... :) On me demande de modifier un shell(fourni ci dessous) et d'afficher à l'écran le résultat de la commande "echo $$" --> c'est à dire le pid du process exécuté...

Mais je ne comprends pas comment récupérer ce fameux pid, on ne peut pas utiliser les fonctions: system("echo $$"), getpid() et getppid.

La fonction execvp et execlp m'affiche "$$" alors que je veux qu'il m'affiche le numéro(pid) de mon process en cours...

Donc je me suis dit que le seul moyen était d'utiliser le fork()... Pour récupérer ce fameux pid. :)

Suis-je sur la bonne voie ou y a-t-il un moyen plus simple et plus logique pour afficher ce pid en utilisant par exemple execvp ? :(

:d) Enoncé:

On vous donne un shell simple. Modifiez-le afin d'y ajouter l'interprétation de la commande echo $$. La commande echo est celle du disque.

:d) Le shell simple en C:

http://pastebin.com/YA5hcVBq

Un tout grand merci d'avance et une bonne soirée :)

godrik
godrik
Niveau 30
07 mars 2014 à 19:51:38

C'est quoi cet exo a la con encore? Moralement il faut parser la ligne et detecter $$ et le remplacer par la valuer qui va bien. Les gens raisonnable utilisent getpid pour obtenir ca...

ptibiscuit32
ptibiscuit32
Niveau 13
08 mars 2014 à 17:55:20

Par rapport a cet algorithme comment puis-je faire pour récupérer ce pid ? J'utilise la fonction fork() et wait() ? Ou y a-t-il un moyen plus simple ?

Comment faire passer une valeur obtenu chez le fils pour le donner au père ? :)

J'ai essayé une variable static et forcément ça ne marche pas...

ptibiscuit32
ptibiscuit32
Niveau 13
08 mars 2014 à 18:01:45

Ou l'inverse une valur obtenu chez le père et le passer chez son fils ? :)

Merci d'avance :ok:

ptibiscuit32
ptibiscuit32
Niveau 13
08 mars 2014 à 18:13:10

Donc en clair ce que je voudrais faire:

Le processus maitre/père crée un processus fils gràçe à "fork()".

"fork()" retourne au processus père le pid du processus fils.

Et c'est là, que je voudrais retenir cette valeur reçu(pid du fils) que le processus maitre/père à reçu pour le filer au processus fils et donc qu'il sache l'utilisé :)

Merci d'avance :)

Coucouzzz
Coucouzzz
Niveau 3
08 mars 2014 à 20:51:18

Le fork me parait être une bonne idée.
Le truc c'est que echo est un built-in (donc integré au shell et non pas un binaire séparé)
et donc le fork est inutile :/
Et meme en faisant un fork, tu aurait - comme tu l'as dit - le pid du fils et non pas du shell.

En supposant que c'est bien ce que tu doive faire, je pense que les pipes sont tes amis :)

ptibiscuit32
ptibiscuit32
Niveau 13
08 mars 2014 à 21:13:09

Merci pour ta réponse, de toute façon je trouve l'énoncé très mal expliqué et pour le pipe on ne devra l'utiliser qu'à partir de la prochaine matière...

Cet exercice m'agace royalement ^^

Donc ce que j'en ai compris je dois utiliser un execlp pour utiliser la commande echo qui va m'afficher le contenu d'une variable qui contiendra le pid du fils1 :)

Si vous me lisez professeur :hap:

Coucouzzz
Coucouzzz
Niveau 3
08 mars 2014 à 21:20:24

c'est sans doute une fonction du genre, tu aurait juste à convertir le nombre en chaîne et en faire un char** avec le nom du binaire pour le donner ensuite au exec-truc.

Mais dans tous les cas il te faut transmettre ce pid au fils :/
Il me parait plutot bizarre que tu ne puisse pas utiliser le pipe, c'est vraiment selon moi LE moyen de transmettre des données entre processus :/
Pour moi tu devrais demander carrément au prof vu que la consigne est pas claire, il a pas de raison de pas te répondre, surtout si tu as trouvé :)

ptibiscuit32
ptibiscuit32
Niveau 13
08 mars 2014 à 21:44:35

Un grand merci d'avoir donner de ton temps pour m'aider ^^

Merci aussi pour l'astuce du pipe je n'y avais pas pensé sait-on jamais :)

Je vais un peu cogiter tout ça parce que c'est vrai qu'il y a pas mal de subtilités :-))) et je demanderai au prof comment il veut que je fasse l'ex... :ok:

Et si ça t'intéresse je te dirai la solution du prof, il va peut-être me sortir un truc de dingue :rire:

Bonne soirée et encore merci :ok:

godrik
godrik
Niveau 30
08 mars 2014 à 22:18:27

nan mais surtout quand tu fait echo $$ c'est le PID du shell que tu veux. Et comment le shell est il sense avoir sont PID sans appeller getpid? Ca pourrait lui etre passe par son pere, mais si son pere c'est bash, il ne va pas lui donner son PID.

ptibiscuit32
ptibiscuit32
Niveau 13
08 mars 2014 à 22:20:08

le seul moyen c'est un getpid ou getppid pour avoir le pid du bash...

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment