#!/usr/bin/env perl use strict; use warnings; use English; use File::Basename; use Cwd; my $NOM_PROG = basename $PROGRAM_NAME; # # # les buts de ce script sont : # 1- creer les pipes nommes pour le dialogue Herezh-Herezh (mkfifo) # 2- lancer le processus Herezh Umat_HZ.info (qui sert d UMAT pour le vrai calcul Herezh de ce test LOI_VIA_UMAT_1.info) # 3- s assurer que le processus Umat_HZ.info fonctionne avant de quitter # # remarque1 : on lance le processus Herezh Umat_HZ.info via le lien symbolique $lien_symbolique_HZ # dont le nom sera facile a reperer pour le script de post-traitement LOI_VIA_UMAT_1.posttrait1 # (car le script LOI_VIA_UMAT_1.posttrait1 aura pour but de tuer ce processus apres le calcul LOI_VIA_UMAT_1.info) # # remarque2 : le processus Herezh Umat_HZ.info est lance dans un processus fils (fork) pour pouvoir le laisser # tourner en fond de tache et quitter ce script # #chemin absolu vers l executable Herezh my $hzchemin = shift(@ARGV); #nom du fichier .info my $finfo = shift(@ARGV); #forcer a vider le buffer (autoflush) $| = 1; #creation des pipes nommes (mkfifo) system("mkfifo -m+wr Umat_envoi_Hz"); if($!) { print "\nErreur (prog:$NOM_PROG) : probleme dans la creation du pipe nomme Umat_envoi_Hz ($!)...\n\n"; print "resultat pretrait : ECHEC\n"; exit; } system("mkfifo -m+wr Umat_reception_Hz"); if($!) { print "\nErreur (prog:$NOM_PROG) : probleme dans la creation du pipe nomme Umat_reception_Hz ($!)...\n\n"; print "resultat pretrait : ECHEC\n"; exit; } #changement d extension (suppression de l extension .a_renommer pour faire de ce fichier un .info exploitable) system("mv -f Umat_HZ.info.a_renommer Umat_HZ.info"); #lien symbolique vers Herezh pour rendre le nom de cette commande unique my $lien_symbolique_HZ = basename $hzchemin; $_ = basename cwd; $lien_symbolique_HZ = $_.'_'.$lien_symbolique_HZ; system("ln -s $hzchemin $lien_symbolique_HZ"); #lancement du processus Herezh Umat dans un processus fils (fork) system("rm -f $lien_symbolique_HZ.com"); my $pid_UMAT_HZ = fork(); # #le bloc suivant ne concerne que le processus fils if($pid_UMAT_HZ == 0) { system("$lien_symbolique_HZ -f Umat_HZ.info"); system("echo 1 > $lien_symbolique_HZ.com"); exit; } #apres un temps de pause, on regarde si le processus Herezh tourne select(undef, undef, undef, 0.5); my $cpt_probleme = 0; while(join('', qx(ps | grep $lien_symbolique_HZ | grep -v grep)) eq '') { select(undef, undef, undef, 0.5); $cpt_probleme++; if($cpt_probleme == 50) { print "\nErreur (prog:$NOM_PROG) : le processus Herezh Umat_HZ.info ne se lance pas (ou alors s est arrete prematurement)...\n\n"; print "resultat pretrait : ECHEC\n"; exit; } } #apres un nouveau temps de pause, on regarde si le fichier $lien_symbolique_HZ.com a ete cree # si oui, ca veut dire que le processus Herezh Umat s est arrete => donc il y a un probleme select(undef, undef, undef, 0.5); if(-e "$lien_symbolique_HZ.com") { print "\nErreur (prog:$NOM_PROG) : le processus Herezh Umat_HZ.info s est peut-etre arrete prematurement...\n\n"; print "resultat pretrait : ECHEC\n"; exit; } #reussite du script print "resultat pretrait : OK\n";