suspendre temporairement une application

Le
Thomas
bonjour :-)



je souhaite suspendre l'execution d'une application, et la reprendre
plus tard


j'ai cru comprendre que c'etait possible avec kill
(c'est ca ?)
mais pour moi "man kill" n'est pas super clair


quels signaux utiliser ?

pour suspendre c'est INT ou ABRT ?
c'est quoi la difference ?

pour reprendre c'est HUP ?
(je vois pas ce que ca peut etre d'autre, mais c'est pas evident)


en passant,
c'est quoi la difference entre QUIT et TERM ?
et à quoi sert ALRM ?

--
Informations sur Nicolas Sarkozy :
http://www.betapolitique.fr/spip.php?article0602
http://www.betapolitique.fr/spip.php?article0601
http://www.betapolitique.fr/spip.php?article0414
http://www.betapolitique.fr/spip.php?article0606
http://tDeContes.hd.free.fr/divers/Ruptures.pdf
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
Thierry Boudet
Le #736040
On 2007-05-30, Thomas

je souhaite suspendre l'execution d'une application, et la reprendre
plus tard
j'ai cru comprendre que c'etait possible avec kill
mais pour moi "man kill" n'est pas super clair

quels signaux utiliser ?

Probablement SIGSTOP et SIGCONT


--
Why drink and drive when you can smoke and fly?

Jean-Louis Liagre
Le #736039

je souhaite suspendre l'execution d'une application, et la reprendre
plus tard


j'ai cru comprendre que c'etait possible avec kill
(c'est ca ?)
mais pour moi "man kill" n'est pas super clair


quels signaux utiliser ?


Sous Solaris, c'est "kill -STOP <pid>", "kill -CONT <pid>".

pour suspendre c'est INT ou ABRT ?


No, ceux là sont définitifs (ou ignorés).

c'est quoi la difference ?


INT, c'est une interruption externe (ex: Control-C)
ABRT, c'est le programme qui s'interrompt lui-même.

pour reprendre c'est HUP ?


No HUP c'est pour signaler une coupure de liaison.

(je vois pas ce que ca peut etre d'autre, mais c'est pas evident)


Il y a aussi "pstop <pid>" et "prun <pid>".

en passant,
c'est quoi la difference entre QUIT et TERM ?


QUIT doit provoquer la génération d'un core.

et à quoi sert ALRM ?


A "réveiller" un processus après un "alarm" ou un "sleep".

Lie Algebra
Le #736037
Thomas wrote:

je souhaite suspendre l'execution d'une application, et la reprendre
plus tard



Slt,

si ton appli a été lancée interactivement à partir d'un terminal, tu
dois pouvoir la suspendre en tapant <ctrl>+z dans ce même terminal.

Ensuite, bg et fg te permettent de basculer au premier plan/tâche de
fond les différents "jobs" listés par la commande jobs.

Pas dit que ce fonctionnement soit standard mais enfait j'en suis
presque sur :)

Emmanuel

thulhu
Le #741939
On 30 mai, 20:53, Jean-Louis Liagre wrote:

Sous Solaris, c'est "kill -STOP <pid>", "kill -CONT <pid>".


Sous Solaris on utilisera plutot la commande pstop <PID> (et prun
<PID> pour le relancer) qui utilise directement
l'interface de contrôle des processus (/proc/<PID>/ctl)

Maintenant ce n'est peut être pas sous Solaris ...

Jean-Louis Liagre
Le #737248
On 30 mai, 20:53, Jean-Louis Liagre wrote:

Sous Solaris, c'est "kill -STOP <pid>", "kill -CONT <pid>".


Sous Solaris on utilisera plutot la commande pstop <PID> (et prun
<PID> pour le relancer)


Je suis d'accord, j'ai d'ailleurs aussi indiqué ces commandes dans ma
réponse.


Thomas
Le #737245
In article (Dans l'article) Lie Algebra
Thomas wrote:

je souhaite suspendre l'execution d'une application, et la reprendre
plus tard



si ton appli a été lancée interactivement à partir d'un terminal,


non, c'est une application graphique, qui swappe terriblement parce
qu'elle est probablement mal programmée, et que je voulais suspendre
pour regarder un film :-)

--
Informations sur Nicolas Sarkozy :
http://www.betapolitique.fr/spip.php?article0602
http://www.betapolitique.fr/spip.php?article0601
http://www.betapolitique.fr/spip.php?article0414
http://www.betapolitique.fr/spip.php?article0606
http://tDeContes.hd.free.fr/divers/Ruptures.pdf


Thomas
Le #737244
In article (Dans l'article) Jean-Louis Liagre wrote (écrivait) :


je souhaite suspendre l'execution d'une application, et la reprendre
plus tard


j'ai cru comprendre que c'etait possible avec kill
(c'est ca ?)
mais pour moi "man kill" n'est pas super clair


quels signaux utiliser ?


Sous Solaris, c'est "kill -STOP <pid>", "kill -CONT <pid>".


merci bcp :-)
(apparemment ca marche partout :-) )

et merci aussi pour toutes les infos complementaires :-)

--
Informations sur Nicolas Sarkozy :
http://www.betapolitique.fr/spip.php?article0602
http://www.betapolitique.fr/spip.php?article0601
http://www.betapolitique.fr/spip.php?article0414
http://www.betapolitique.fr/spip.php?article0606
http://tDeContes.hd.free.fr/divers/Ruptures.pdf


Luc.Habert.00__arjf
Le #737243
Thomas :

quels signaux utiliser ?

pour suspendre c'est INT ou ABRT ?


Ni l'un ni l'autre, c'est STOP.

c'est quoi la difference ?

pour reprendre c'est HUP ?
(je vois pas ce que ca peut etre d'autre, mais c'est pas evident)


en passant,
c'est quoi la difference entre QUIT et TERM ?
et à quoi sert ALRM ?


Bon, lançons nous dans un laïus :

À trois exceptions près, un signal est juste un message que l'on envoie à un
process, et dont il peut faire ce qu'il veut.

Les trois exceptions sont :
- KILL : le noyau tue le process sans lui demander son avis
- STOP : le noyau suspend le process sans lui demander son avis
- CONT : le noyau relance le process si il était suspendu.

Les autres signaux peuvent en revanche être rattrapés. La plupart d'entre
eux ont une signification conventionelle, mais un programme est libre de
leur donner un autre sens. Le sens en question se résume généralement en
« va mourir », et le comportement par défaut du process qui le reçoit est de
se terminer.

SEGV, BUS, ILL, FPE : normalement générés par le noyau, quand un process a
tenté d'effectuer une opération illégale (accès mémoire invalide, opération
non supportée par le processeur, ...).

HUP : normalement généré par le noyau quand le terminal dans lequel tourne
le process est fermé (je simplifie grossièrement), il est courant de
l'envoyer à la main pour dire à un programme de se fermer proprement;
certains démons l'interprètent comme « relis tes fichiers de conf ».

INT, QUIT : normalement généré par le noyau quand l'utilisateur tape ^C
(resp. ^) (enfin, le caractère en question est réglable) dans le terminal
où tourne le programme. Le second veut dire « va mourir », tandis que le
premier veut plutôt dire « arrête ce que tu es en train de faire, et demande
moi des ordres », menfin la plupart des programmes se ferment quand on ^C.

TERM : « va mourir », généré seulement par kill. C'est le signal que la
commande kill envoie par défaut.

TSTP : normalement généré par le noyau quand on tape ^Z dans le terminal où
tourne le programme. Le comportement par défaut est de se suspendre, mais un
programme peut l'intercepter (typiquement, pour restaurer l'état du
terminal, avant de s'autoenvoyer un SIGSTOP).

TTIN, TTOU : normalement envoyé par le noyau quand un programme essaye de
lire ou écrire dans son terminal alors que ce n'est pas à son tour, l'effet
par défaut est de se suspendre.

ABRT : normalement autoenvoyé via la fonction « abort », l'effet par défaut
est de se terminer.

ALRM : normalement envoyé par le noyau à un process qui lui a demandé de lui
envoyer ce signal au bout d'un temps spécifié.

Pour SEGV et ses amis, ainsi que ABRT, l'effet par défaut est non seulement
de terminer le programme, mais en plus de pondre dans un fichier une image
de l'espace mémoire du process, afin de pouvoir l'examiner pour comprendre
ce qui a causé le bug.

Thomas
Le #741937
In article (Dans l'article) (Luc Habert) wrote (écrivait) :

Thomas :

quels signaux utiliser ?

pour suspendre c'est INT ou ABRT ?


Ni l'un ni l'autre, c'est STOP.

c'est quoi la difference ?

pour reprendre c'est HUP ?
(je vois pas ce que ca peut etre d'autre, mais c'est pas evident)


en passant,
c'est quoi la difference entre QUIT et TERM ?
et à quoi sert ALRM ?


Bon, lançons nous dans un laïus :


merci bcp :-))


par curiosité,

est ce qu'il y a un signal
qui serait envoyé à tous les processus quand on demande au systeme de
redemarrer,
pour leur dire de se fermer proprement,
avec un peu de temps pour se fermer avant qu'ils soient tués ?

--
Informations sur Nicolas Sarkozy :
http://www.betapolitique.fr/spip.php?article0602
http://www.betapolitique.fr/spip.php?article0601
http://www.betapolitique.fr/spip.php?article0414
http://www.betapolitique.fr/spip.php?article0606
http://tDeContes.hd.free.fr/divers/Ruptures.pdf


Luc.Habert.00__arjf
Le #741936
Thomas :

est ce qu'il y a un signal
qui serait envoyé à tous les processus quand on demande au systeme de
redemarrer,
pour leur dire de se fermer proprement,
avec un peu de temps pour se fermer avant qu'ils soient tués ?


Sur ma debian, le /etc/rc6.d/S20sendsig contient ceci :

killall5 -15 # SIGTERM
log_action_end_msg 0
for seq in 1 2 3 4 5 ; do
# use SIGCONT/signal 18 to check if there are
# processes left. No need to check the exit code
# value, because either killall5 work and it make
# sense to wait for processes to die, or it fail and
# there is nothing to wait for.
killall5 -18 || break

sleep 1
done
log_action_begin_msg "Killing all remaining processes"
killall5 -9 # SIGKILL

Bref, il envoie un sigterm et laisse cinq secondes aux process pour se
fermer proprement avant de les dégommer.

Publicité
Poster une réponse
Anonyme