Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
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/

3 réponses

Avatar
JKB
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.
Avatar
Stephane CHAZELAS
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
Avatar
Manuel Pégourié-Gonnard
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/