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

suspendre temporairement une application

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

10 réponses

Avatar
Thierry Boudet
On 2007-05-30, Thomas wrote:

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?

Avatar
Jean-Louis Liagre

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".

Avatar
Lie Algebra
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

Avatar
thulhu
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 ...

Avatar
Jean-Louis Liagre
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.


Avatar
Thomas
In article (Dans l'article) <465dca8d$0$10773$,
Lie Algebra wrote (écrivait) :

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


Avatar
Thomas
In article (Dans l'article) <465dc82c$0$18277$,
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


Avatar
Luc.Habert.00__arjf
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.

Avatar
Thomas
In article (Dans l'article) <f3p5ne$oi8$,
(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


Avatar
Luc.Habert.00__arjf
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.