[C/C++/UNIX] Comment détecter qu'une instance d'un pgm est déjà lancé

Comment détecter qu'une instance d'un pgm est déjà lancé [C/C++/UNIX] - Programmation

Marsh Posté le 07-02-2002 à 13:07:23    

Ouais, qqun pourrait me dire comment on peut faire ceci en C sous unix :
J'ai lancé le prog toto et il tourne, je veux relancer une instance de ce même programme mais toto (le deuxième) doit me répondre : "mais je suis déjà lancé mon vieux !".
Enfin vous voyez quoi ...
 
Merci Merci Merci
@+


---------------
RobRipper
Reply

Marsh Posté le 07-02-2002 à 13:07:23   

Reply

Marsh Posté le 07-02-2002 à 13:11:39    

ha sous unix ? dans le mail que j'ai reçu t'avais pas précisé :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-02-2002 à 13:14:19    

ouais sorry, mais n'oublie jamais que je suis un "Unix guy" maintenant ;-)


---------------
RobRipper
Reply

Marsh Posté le 07-02-2002 à 13:22:58    

je sais pas si ça peut t'aider :
 
en bash :  
status "path/pgm" > /dev/null
ERR=$?
if [ "$ERR" != 0 ]; then
 echo "is not running"
else
 echo "is running"
fi
 
sinon en shell
ps aux | grep pgm | grep -v "grep"

Reply

Marsh Posté le 07-02-2002 à 13:26:08    

Merci, mais j'ai besoin de ça en C...  :( :-((
Pour le shell j'avais trouvé  :p  ;)


---------------
RobRipper
Reply

Marsh Posté le 07-02-2002 à 15:59:41    

Bon, j'ai une petite solution ici, c peut être pas trop trop élégant mais ça fonctionne  :heink:  :D  
 
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
 
static char pgm_name[256];
 
static void sig_int(int signo)
{
  char cmd[255];
  sprintf(cmd, "chmod +x %s", pgm_name);
  system(cmd);
 
  exit(0);
}
 
main(int argc, char *argv[])
{
  char cmd[255];
  strcpy(pgm_name, argv[0]);
  sprintf(cmd, "chmod -x %s", pgm_name);
  system(cmd);
 
  signal(SIGINT, sig_int);
 
  while(1)
  {
    printf("%s toujours vivant!\n", argv[0]);
    sleep(1);
  }
}


---------------
RobRipper
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed