détecter qu'on est en arrière-plan

Le
Manuel Pégourié-Gonnard
Bonjour,

Y a-t-il un moyen pour un programme de détecter s'il tourne en
arrière-plan ou pas ? Même de façon heuristique, je n'ai pas besoin d'un
truc sûr.

J'avais d'abord pensé à regarder si STDIN et un tty ou pas, mais je me
suis rendu compte ensuite qu'un shell interactif n'est pas obligé de
rediriger STDIN depuis /dev/null pour les commandes lancées en
arrière-plan (et qu'en pratique, ma version de zsh ne le fait pas).

Toute piste est la bienvenue.

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JKB
Le #20531711
Le 10-11-2009, ? propos de
détecter qu'on est en arrière-plan,
Manuel Pégourié-Gonnard ?crivait dans fr.comp.os.unix :
Bonjour,



Bonsoir,

Y a-t-il un moyen pour un programme de détecter s'il tourne en
arrière-plan ou pas ? Même de façon heuristique, je n'ai pas besoin d'un
truc sûr.

J'avais d'abord pensé à regarder si STDIN et un tty ou pas, mais je me
suis rendu compte ensuite qu'un shell interactif n'est pas obligé de
rediriger STDIN depuis /dev/null pour les commandes lancées en
arrière-plan (et qu'en pratique, ma version de zsh ne le fait pas).

Toute piste est la bienvenue.



Cela va essentiellement dépendre de la notion d'arrière plan. Chez
moi, un processus en arrière plan est rattaché à init par un
mécanisme interne au programme. Il suffit donc de vérifier si son
père est init (ou avec un ps -eaf qui le montre détaché de tout
terminal).

Si en arrière plan veut dire détaché à la manière '&' à partir d'une
invite d'un shell quelconque, il faut ruser. Peut-être avec getsid ?

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Stephane CHAZELAS
Le #20531701
2009-11-10, 22:33(+01), Manuel Pégourié-Gonnard:
[...]
Y a-t-il un moyen pour un programme de détecter s'il tourne en
arrière-plan ou pas ? Même de façon heuristique, je n'ai pas besoin d'un
truc sûr.

J'avais d'abord pensé à regarder si STDIN et un tty ou pas, mais je me
suis rendu compte ensuite qu'un shell interactif n'est pas obligé de
rediriger STDIN depuis /dev/null pour les commandes lancées en
arrière-plan (et qu'en pratique, ma version de zsh ne le fait pas).


[...]

Ce qu'il te faut, c'est verifier si le process group est ou non
le foreground process group du terminal.

if perl -MPOSIX -e 'open A, "</dev/tty" or die($!);
exit (tcgetpgrp(fileno(A)) == getpgrp());'
then echo "I'm not in the foreground process group of the terminal"
fi

--
Stéphane
Manuel Pégourié-Gonnard
Le #20533701
Stephane CHAZELAS scripsit :

Ce qu'il te faut, c'est verifier si le process group est ou non
le foreground process group du terminal.

if perl -MPOSIX -e 'open A, "</dev/tty" or die($!);
exit (tcgetpgrp(fileno(A)) == getpgrp());'
then echo "I'm not in the foreground process group of the terminal"
fi



Merci, c'est exactement ce que je cherchais. (Comme en plus c'est dans
un script Perl que je souhaitais faire ça, le recours à Perl tombe très
bien.)

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Publicité
Poster une réponse
Anonyme