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

[shell] execution asynchrone

godrik
godrik
Niveau 30
26 mars 2009 à 20:07:36

Bonjour a vous,
je cherche comment faire une execution asynchrone en shell proprement.
J'ai deux programmes a lancer qui sont parfaitement independant.
je peux les lancer:
./programme1
./programme2
mais je sais que les programmes sont single threade alors que ma machine a deux coeurs. Comment faire pour lancer les deux en parallele sachant que j'ai des operations de synchronisation a faire a la fin ?

je pourrais faire
"./programme1 && ./programme2" parceque je sais que les programmes retournent 'vrai'. mais ca m'a l'air un peu moche.

Je pensais utiliser la fonction built in wait de bash, mais je ne sais pas comment recuperer les identifiants des 'jobs bash'.
Un avis ?

chris_27
chris_27
Niveau 10
26 mars 2009 à 20:11:35

Réponse courte : code en C. :-)

Réponse longue : "./programme1 && ./programme2" ne fait pas ce que tu veux. Si programme1 attend des trucs de programme2, tu vas boucler ad vitam eternam vu que programme2 n'est lancé que si programme1 termine (et qu'il termine sans erreur en plus).
Par contre, "./programme1 & ./programme2" devrait le faire (ce & n'a absolument rien à voir avec un ET logique, c'est juste un ; non bloquant si je puis m'exprimer ainsi).

chris_27
chris_27
Niveau 10
26 mars 2009 à 20:14:40

Je viens de penser à un truc : tu n'auras (bien sûr) plus accès à l'entrée standard pour programme1 avec la commande en &. :(

godrik
godrik
Niveau 30
26 mars 2009 à 20:26:25

C'est super chaint a ecrire ca en C.
Je passe un temps fou dans du code maison, awk, gnuplot...
Je vais essayer de voir comment fonctione wait.

est ce que "./programme1 & ./programme2" est equivalent a ./programme1 &
./programme2
?

chris_27
chris_27
Niveau 10
26 mars 2009 à 20:30:32

heu... j'aurais du utiliser ma syntaxe habituelle. :( Je te propose :

$ ./programme1 & ./programme2

Ou alors il manque un caractère dans ta question. :doute:

godrik
godrik
Niveau 30
26 mars 2009 à 20:49:16

mmm, oui, il manque un caractere.

Est ce que

$ ./programme1 & ./programme2

est pareil que

$ ./programme1 &
$ ./programme2

?

etait la question qu'il fallait lire/que je voulais ecrire

chris_27
chris_27
Niveau 10
26 mars 2009 à 21:04:52

Globalement, ça fait la même chose oui. Après, dans le premier cas, comme tu évites de "relancer" l'interpréteur de ligne de commande entre les deux, tu as toujours l'espoir que programme2 soit lancé immédiatement après le lancement de programme1. :-)

godrik
godrik
Niveau 30
26 mars 2009 à 21:18:04

il semblerait que ce que je cherche est:
$ ./programme1 &; ./programme 2; wait

par contre, je n'ai pas bien compirs comment les numeros de job bash etait assigne, donc c'est difficile de faire une execution plus complique

chris_27
chris_27
Niveau 10
26 mars 2009 à 21:24:12

Ha... je commence à cerner le truc...

$ ./programme1 & TMP=$! ; ./programme 2 ; wait $TMP

godrik
godrik
Niveau 30
26 mars 2009 à 21:26:11

ah!!!!!!! la variable magique est $! :)
great ! Je vais pouvoir charger mon systeme comme un bourrin (et laissons le scheduler de l'os se debrouiller)

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