# Function et screen \[Résolut\]

**URL:** <https://www.debian-fr.org/t/function-et-screen-resolut/13146>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 5:24 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146 "2016-02-20T17:24:50Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 5:24 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/1 "2016-02-20T17:24:50Z")

</div>

hello

je lance un script Shell dans/etc/init.d

Seulement si le script boucle ou plante, ou un des programmes plante sa gel la suite du démarrage bref sa plainte.

donc je pense lancer le programme normalement et pour les trucs qui puissent planter par exemple l’installation de Virtualbox

ça donne :

`
function fonction_qui_va_planter() {
while true ;do
echo « bug boucle »
ou
binaire_qui_a_planter
}
function main () {
screen — m fonction_qui_va_planter
}`

Autrement je doit passer par un second fichier ☹  
Seulement ça ne marche pas. Il y a peux être une autre manière de faire ?

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:24 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/2 "2016-02-20T17:24:51Z")

</div>

surement.

---

<div class="post-metadata">

**Author:** ![Ludo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ludo/32/3426_2.png) [@Ludo](https://www.debian-fr.org/u/Ludo)\
**Post date:** [Février 20, 2016, 5:24 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/3 "2016-02-20T17:24:52Z")

</div>

[quote=“panthere”]hello

je lance un script Shell dans/etc/init.d

Seulement si le script boucle ou plante, ou un des programmes plante sa gel la suite du démarrage bref sa plainte.  
[/quote]

Jusque là je comprend.

[quote=“panthere”]  
donc je pense lancer le programme normalement et pour les trucs qui puissent planter par exemple l’installation de Virtualbox

ça donne :

`
function fonction_qui_va_planter() {
while true ;do
echo « bug boucle »
ou
binaire_qui_a_planter
}
function main () {
screen — m fonction_qui_va_planter
}`

Autrement je doit passer par un second fichier ☹  
Seulement ça ne marche pas. Il y a peux être une autre manière de faire ?[/quote]

Tout le reste je pige que dalle.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 5:24 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/4 "2016-02-20T17:24:54Z")

</div>

Si je crois qu’il voudrait lancer la fonction en parammèle de telle manière à ne pas l’attendre:

Tu peux utiliser un script d’attente:

`#!/bin/sh
COMMAND=$2
DELAI=$1
BUTEE=`date +"%s"`
BUTEE=$[$BUTEE+$DELAI]
$COMMAND &
PID=$!
ESTLA=`ps $PID | grep $PID`
while [-n "$ESTLA"] ; do
    DATE=`date +"%s"`
    if [$DATE -ge $BUTEE] ; then
        kill $PID
    fi
    ESTLA=`ps $PID | grep $PID`
done
`

Par exemple:  
$ [limite.sh](http://limite.sh) 2 "sleep 50"  
limite à 2 secondes la commande sleep 50

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 5:24 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/5 "2016-02-20T17:24:59Z")

</div>

Tu peut appeler ta fonction entre parenthèse ça lance un fork.  
Sinon tu peut aussi appeler ta fonction avec un & à la fin ça le détache de processus principal.

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 5:25 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/6 "2016-02-20T17:25:00Z")

</div>

fran.b est dans le vrai. seulement c’est pas ce que je veux faire. du moin en tout ca pas kill le programe sans que l’utilisateur puisse regarder ce qui si passe, d’ou l’interet de screen.

```auto
#!/bin/sh

fonction traitement () 
{
echo "ici le programe plante, simuler par le signial 19"
kill -s 19 le_pid_duprgrame (-s 18 pour reprendre) 
# ici on continue que si le programme c'est terminer sinon on attend.
echo " il pose peu une question que l'utilisateur peut répondre "
echo " pour que ça continue normalement "
}

fonction main () 
{
    echo " ça doit rester, soit dans un autre tty, soi dans un screen"
    echo " pour que l'utilisateur puisse voir l'erreur, et aux besoins "
    echo " répondre aux questions du programme lancé "
    echo " aptitude — y " " Evite les questions mai si on élève le — y ça gèle le tout "
traitement
    echo " ça continue, traitement n'empêche pas la suite "
}
main
```

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 5:25 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/7 "2016-02-20T17:25:03Z")

</div>

Je suis pas sur que tout les \*sh soient le top pour gérer des processus.

Mais tu peut regarder du coté de fg, jobs tout ça.  
Ou sinon regarder du coté de ksh ou zsh.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 5:25 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/8 "2016-02-20T17:25:14Z")

</div>

Dans ce cas:

`#!/bin/sh
COMMAND=$2
DELAI=$1
BUTEE=`date +"%s"`
BUTEE=$[$BUTEE+$DELAI]
$COMMAND | tee /tmp/resultats 2> /tmp/erreurs &
ERREUR=0
PID=$!
ESTLA=`ps $PID | grep $PID`
while [-n "$ESTLA"] ; do
    DATE=`date +"%s"`
    if [$DATE -ge $BUTEE] ; then
        ERREUR=1
        ESTLA=""
    else
        ESTLA=`ps $PID | grep $PID`
    fi
done
`

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 5:27 UTC](https://www.debian-fr.org/t/function-et-screen-resolut/13146/9 "2016-02-20T17:27:12Z")

</div>

Hello  
Finalement je passe par un fichier avec screen.

exemple:

`
#echo -e "\r\Etape 1" > /dev/tty1
echo "' texte a executer'" >> /monfichier.txt
#echo -e "\r\Termine" > /dev/tty1
chmod +x /monfichier.txt
`Ensuite un lien dans /etc/rc2.d et sa roule 🙂

sa permet de démarrer la machine et si sa plante l’utilisateur peux ce loguer et aller voir le screen 🙂

Les messages son afficher dans le TTY1 également  
voila 🙂

Merci a tous pour les réponses ![:smt006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif)
