Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1453 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  system et exec ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

system et exec ?

n°1550156
donny3
Posté le 26-04-2007 à 17:05:33  profilanswer
 

salut,
 
Je viens de lire un peu la doc perl,
je voulais savoir
la grande difference entre exec et system
est que si dans mon script j appel un autre script perl en background avec system,si jamais le pere plante alors le fils plante;
par contre si j'utilise exec, si jamais le pere plante, le fils continu à tourner;
 
c'est bien cela ?
 
MErci.

mood
Publicité
Posté le 26-04-2007 à 17:05:33  profilanswer
 

n°1550161
Elmoricq
Modérateur
Posté le 26-04-2007 à 17:10:48  profilanswer
 

[:klem3i1][:ratal]

 

En lançant un programme avec exec(), le nouveau programme remplace le script PERL courant.

 

Exemple, la commande print ne sera jamais exécutée :

exec machin
print "haha lolz\n";

 

Alors que system() "crée" en quelque sorte un processus fils, et le script PERL qui utilise system() peut ensuite continuer.


Message édité par Elmoricq le 26-04-2007 à 17:10:57
n°1550163
matafan
Posté le 26-04-2007 à 17:12:19  profilanswer
 

Pas du tout. La différence c'est qu'avec exec justement, il n'y a pas de père : le qui appelle exec() process est tout simplement remplacé par ce qui est exec()uté. Alors qu'avec system() au contraire, un process fils créé (avec un fork sous unix/linux), et c'est le fils qui fait ensuite un exec() (au sens C) de ce que tu passes à system().
 
[Grillé]


Message édité par matafan le 26-04-2007 à 17:12:55
n°1550171
donny3
Posté le 26-04-2007 à 17:21:34  profilanswer
 

en gros si je veux que lorsque je lance le fils et que le fils continu a tourner alors que le pere a planter,
il faut que j utilise exec et pas system;
car avec system si le pere meurt le fils meurt aussi;

n°1550174
Elmoricq
Modérateur
Posté le 26-04-2007 à 17:22:51  profilanswer
 

Non. Dans les deux cas, le fils meurt. Sauf qu'avec exec, le père ne peut plus planter parce qu'il est remplacé par fiston. [:dawak]

 

Après on sort du cadre de PERL pour entrer dans les spécificités de l'OS. Sur un unixoïde, lancer la commande précédée de "nohup" (ex : "nohup macommande &" ) permet de désolidariser le fiston du papa.


Message édité par Elmoricq le 26-04-2007 à 17:23:32
n°1550346
donny3
Posté le 27-04-2007 à 07:51:10  profilanswer
 

ok
je viens tester en faisant cela

Code :
  1. exec ('./monscript.pl &');


 
et effectivement une fois arriver au exec,
mon script principale perds la main et il est remplacer par celui du exec
du coup c'est pas faut que je privilegie la piste du nohup
car ce que je voulais c'est si le pere meurt le fils continu a tourner;

n°1550432
donny3
Posté le 27-04-2007 à 10:59:03  profilanswer
 

je pensai à quelquechose dans ce genre la

Code :
  1. system ('nohup perl ./script.pl &')


mais apparamment si le pere plante le fils aussi

n°1550438
Elmoricq
Modérateur
Posté le 27-04-2007 à 11:09:55  profilanswer
 
n°1550453
donny3
Posté le 27-04-2007 à 11:28:22  profilanswer
 

et ton script se presente comment ?

n°1550458
Elmoricq
Modérateur
Posté le 27-04-2007 à 11:36:05  profilanswer
 

Même ligne de commande que toi, avec nohup. Le processus fils est bien rattaché au processus 1 (initd), et non au père, qui peut donc crever sans que le fils n'en soit affecté.

 

Par contre, le processus fils n'étant plus non plus rattaché au terminal, il n'y a plus d'entrée/sortie dessus.


Message édité par Elmoricq le 27-04-2007 à 11:36:17
mood
Publicité
Posté le 27-04-2007 à 11:36:05  profilanswer
 

n°1550459
donny3
Posté le 27-04-2007 à 11:39:41  profilanswer
 

je viens test en ouvrant deux shell
et en faisant un ps
quand le pere meurt les deux fils meurt aussi;
 
mon script se presente ainsi
code script principal

Code :
  1. ....
  2. sytem (' nohup perl ./scriptb.pl &');
  3. ...

n°1550463
Elmoricq
Modérateur
Posté le 27-04-2007 à 11:44:36  profilanswer
 

[:kiki]
 
taiste.pl :

#! /usr/bin/perl
 
system('nohup perl taiste2.pl &');
 
sleep 60;


 
taiste2.pl :

#! /usr/bin/perl
 
sleep 60;


 
 
 
Et ça donne :

$ taiste.pl &
[1] 11492
$ ps -f | grep taiste
  user 11492  4180  0 11:41:53 pts/188  0:00 /usr/bin/perl taiste.pl
  user 11495     1  0 11:41:53 pts/188  0:00 perl taiste2.pl


 
Déjà, note ici qui est le père de taiste2.pl  
C'est "1" (soit initd)
 
Suite :

$ kill -9 11462
Killed
$ ps -f | grep taiste
  user 11495     1  0 11:41:53 pts/188  0:00 perl taiste2.pl
$


 
Fiston est toujours là...

n°1550481
donny3
Posté le 27-04-2007 à 12:01:22  profilanswer
 

je viens tester ton cas,il ressemble au miens
mais c'est pas la même chose parceque toi ton script principal tu l'appel en background
 

Code :
  1. taiste.pl &

n°1550483
Elmoricq
Modérateur
Posté le 27-04-2007 à 12:05:34  profilanswer
 

Aucune différence.

n°1550484
donny3
Posté le 27-04-2007 à 12:12:55  profilanswer
 

teste et tu verras,je l'ai fait et sa fonctionne pas

n°1550495
matafan
Posté le 27-04-2007 à 12:56:48  profilanswer
 

Aucune différence. T'es sur que quand t'as testé, le process fils n'a pas tout simplement terminé après 1 minute ?

n°1550501
donny3
Posté le 27-04-2007 à 13:05:53  profilanswer
 

je suis sur, parceque le process fils appel un progamme et qu'il ne se termine que lorsque se programme est fini;

n°1550504
Elmoricq
Modérateur
Posté le 27-04-2007 à 13:08:00  profilanswer
 

Peux-tu montrer le bout de code incriminé ?
 
Es-tu sûr que le fichier nohup.out qui est généré automatiquement ne contient aucune erreur qu'aurait pu sortir ton script ?

n°1550618
donny3
Posté le 27-04-2007 à 15:13:47  profilanswer
 

deja je viens de me rendre compte  
en lançant le script enfant en background,
que le script pere lançait 2 fois le meme script enfant en background.

n°1550727
donny3
Posté le 27-04-2007 à 16:46:15  profilanswer
 

quand je lance avec nohup
j'ai ce message chaque fois qu'il lance un script fils

Citation :


nohup: appending output to `nohup.out'


 
c'est normal ?.

n°1550731
anapajari
s/travail/glanding on hfr/gs;
Posté le 27-04-2007 à 16:50:21  profilanswer
 

[:w3c compliant] nan mais surtout montre pas ton code, avec Madame Soleilmoricq et Irmafatan on va se servir de nos pouvoirs téléperliques pour t'aider ...

n°1550738
Pablo Escr​obarbe
Retour d'exil
Posté le 27-04-2007 à 17:02:55  profilanswer
 

je parie que son code commence par #!/usr/bin/perl
[:petitpois2]

n°1550740
Elmoricq
Modérateur
Posté le 27-04-2007 à 17:08:00  profilanswer
 

donny3 a écrit :

quand je lance avec nohup
j'ai ce message chaque fois qu'il lance un script fils

Citation :


nohup: appending output to `nohup.out'


 
c'est normal ?.


 
 
"man nohup" BOURDEL §§§   http://www.izipik.com/images/20070426/j1vb4vit36ghh9vi7l-cerveaufou.gif  
 

Citation :

FILES
     nohup.out
           the output file of the  nohup  execution  if  standard
           output  is  a terminal and if the current directory is
           writable.
 
    $HOME/nohup.out
           the output file of the  nohup  execution  if  standard
           output  is  a terminal and if the current directory is
           not writable.

n°1552026
donny3
Posté le 02-05-2007 à 08:31:37  profilanswer
 

mon code commence par ça
c'est du perl donc c'est un peu logique
#!/usr/bin/perl -w

n°1552029
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-05-2007 à 08:45:50  profilanswer
 

donny3 a écrit :

mon code commence par ça
c'est du perl donc c'est un peu logique
#!/usr/bin/perl -w


nan mais c'est sur que là ça va bien nous aider ... [:w3c compliant]

n°1552037
donny3
Posté le 02-05-2007 à 09:10:16  profilanswer
 

mon code voila
 

Code :
  1. my $dbh = DBI->connect("dbi:Oracle:$dbname", $user, $passwd) or
  2. die "Database connection not made: $DBI::errstr";
  3. my $req ="select * from application  where temp='PLI'";
  4. my $sth=$dbh->prepare($req);
  5. $sth->execute();
  6. while (my ($a,$b,$c,$d) = $sth->fetchrow_array())
  7. {
  8. $times = $d;
  9. my $dossier = $a;
  10. my $appli=$c;
  11. system ('nohup perl ./finded.pl -d '.$dossier.' -c '.$appli.' -b '.$b.' &');
  12. }
  13. $sth -> finish;
  14. $dbh -> disconnect;

n°1552055
donny3
Posté le 02-05-2007 à 10:05:27  profilanswer
 

j'ai réessayer avec ton exemple elmoricq
quand je teste ton exemple cela fonctionne  
par contre quand je teste avec le miens;
quand je tue le pere alors les enfants meurs aussi

n°1552485
donny3
Posté le 02-05-2007 à 17:15:25  profilanswer
 

c'est possible d utiliser un fork ?

n°1552495
Elmoricq
Modérateur
Posté le 02-05-2007 à 17:25:15  profilanswer
 

Lis la documentation : system() fait déjà un fork().
 
Et y a surement un problème dans ton script...err, "finded.pl" (n'utilise pas l'anglais si tu ne sais pas le parler/l'écrire :/).

n°1552501
donny3
Posté le 02-05-2007 à 17:29:42  profilanswer
 

il fait un fork bizarre alors
parceque le fils depend du pere
et dans finded il n y a aucun probleme
je lance tout seul il fonctionne
PS : quel rapport avec l'anglais , je vois pas le rapport;

n°1552504
Elmoricq
Modérateur
Posté le 02-05-2007 à 17:33:01  profilanswer
 

donny3 a écrit :

il fait un fork bizarre alors


 
[:prozac]
 
Bientôt tu vas nous sortir quoi, qu'il y a un bug dans PERL ? [:dawak]
 

donny3 a écrit :

parceque le fils depend du pere
et dans finded il n y a aucun probleme
je lance tout seul il fonctionne


 
Code ?
 

donny3 a écrit :

PS : quel rapport avec l'anglais , je vois pas le rapport;


 
Parce que "finded" est une faute horrible ? [:dawak]

n°1552678
Taz
bisounours-codeur
Posté le 02-05-2007 à 22:26:56  profilanswer
 

nohup ? tu ne peux pas forker comme tout le monde et faire tout ça probablement ?

n°1552941
donny3
Posté le 03-05-2007 à 09:30:15  profilanswer
 

pardon TAz ?
 
ouai c'est bon find found found

n°1552942
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-05-2007 à 09:31:32  profilanswer
 
n°1553119
donny3
Posté le 03-05-2007 à 13:39:43  profilanswer
 

en y reflechissant bien ,
je pense pas que le fork soit la solution
je viens de relir la doc dessus et ça me parait pas trop être ce qu'il faut faire;

n°1553277
Taz
bisounours-codeur
Posté le 03-05-2007 à 16:13:49  profilanswer
 

et y a des tas de bouts de code pour perl qui trainent qui font du deamon/daemonize
 
fork pas la solution ? et tu crois que system / nohup ça en fait combien de fork ...

n°1553289
donny3
Posté le 03-05-2007 à 16:31:38  profilanswer
 

system il fait un fork donc je pense pas
je pense avoir trouver

n°1553294
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-05-2007 à 16:33:38  profilanswer
 

ce topic est collector ...

n°1553295
Elmoricq
Modérateur
Posté le 03-05-2007 à 16:33:50  profilanswer
 

donny3 a écrit :

system il fait un fork donc je pense pas
je pense avoir trouver


 
Ouais mais non, ce que propose taz est un peu différent.
 
Ceci dit, vu comment tu galères avec nohup déjà...

n°1553306
Taz
bisounours-codeur
Posté le 03-05-2007 à 17:01:53  profilanswer
 

si t'en es à faire des system nohup en perl, bah passe à bash

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  system et exec ?

 

Sujets relatifs
Probleme avec la fonction system()commande exec
variable dans system()system.exit(0) quand l'utiliser?
exec + variable phpfork(), wait(), exec() et autres sous Win?
Executer commande externe (exec, system)[php] - commande system et exec
[php] au secours!!! (exec, system et autres!!)Fonctions exec(), system(), passthru() ? Help !!
Plus de sujets relatifs à : system et exec ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR