OVH Cloud OVH Cloud

zsh, existence processus, if

1 réponse
Avatar
R12y
Bonjour,

J'essaie de faire un truc en ZSH, dans un "if", pour détecter si un
processus tourne ou pas.
C'est dans le but d'être alerté dès que le process à fini (ou a planté).
Je ne veux pas simplement faire une séquence dans le genre

$ programme_a_tester; alerter;

Ca serait un peu long à expliquer pour justifier.

moi je voudrais savoir si le process est toujours en cours et sinon
m'alerter si il n'est plus en cours. ce sera lancé par une entrée dans
crontab.
La documentation de ZSH sur les "if" ne m'aide pas beaucoup:
http://zsh.sunsite.dk/Guide/zshguide03.html#l68

En gros ce que je veux c'est:

if [[ps aux | grep un_programme | grep -v grep]]; then
print "il est lance"
else
print "il est mort"
alerter
fi

C'est la syntaxe de ce qu'il y a entre "if" et "then".
Pourriez-vous me donner un coup de main?
Merci d'avance.

--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath=91&products_id=456

1 réponse

Avatar
TiChou
Dans le message <news:,
*R12y* tapota sur f.c.o.unix :

Bonjour,


Salut, :)

J'essaie de faire un truc en ZSH, dans un "if", pour détecter si un
processus tourne ou pas.

moi je voudrais savoir si le process est toujours en cours et sinon
m'alerter si il n'est plus en cours. ce sera lancé par une entrée dans
crontab.

En gros ce que je veux c'est:

if [[ps aux | grep un_programme | grep -v grep]]; then


Que c'est laid. :)

Sous Linux (je suppose que c'est le cas chez toi ;-P) et/ou avec les procps,
pour lister les processus d'un programme bien nommé :

$ ps -C un_programme

ou bien :

$ pgrep un_programme

print "il est lance"
else
print "il est mort"
alerter
fi

C'est la syntaxe de ce qu'il y a entre "if" et "then".
Pourriez-vous me donner un coup de main?


En gardant ton idée d'utiliser la commande ps :

if ps -C un_programme &>/dev/null
then
...

ou bien :

if pgrep un_programme &>/dev/null
then
...

ou encore :

if pidof un_programme &>/dev/null
then
...

On peut aussi envoyer le signal 0 au process, la réponse à ce signal
permettant alors de déterminer si le process tourne ou non :

if pkill -0 un_programme
then
...

ou :

if killall -0 un_programme &>/dev/null
then
...

ou encore, si on connaît le pid du process :

if kill -0 $(< /var/run/un_programme.pid) &>/dev/null
then
...

Merci d'avance.


De rien.

--
TiChou