La commande linux «shutdown» autorisera-t-elle un paramètre à déterminer la pause entre l'envoi de SIGTERM et SIGKILL?

4

La page de manuel semble indiquer non. Il y a /etc/rc.d/init.d/halt sur Fedora. Il y a une pause codée en dur, mais il doit exister un meilleur moyen que de changer ce script. Toute aide serait appréciée.

s2cuts
la source

Réponses:

4

La page de manuel sur mon système a:

-t sec Tell  init(8)  to  wait sec seconds between sending
processes the warning and  the kill signal, before changing 
to another runlevel.

(C'est probablement une question plus appropriée pour serverfault)

wnoise
la source
1
Est-ce ce que veut l'OP? Un délai entre l’ avertissement et l’ arrêt effectif ? Ou un délai entre SIGTERM (demander gracieusement les processus à terminer) et SIGKILL (tuer immédiatement les processus)?
Bague Ø
1
L'as tu essayé? Cela semble être obsolète. Je ne peux certainement pas le faire fonctionner sur les distributions que j'ai essayées.
S2cuts
1
@ ring0: le SIGTERM est l'avertissement.
@ s2cuts: j'ai. J'exécute un debian raisonnablement actuel avec le paquet sysvinit (2.88dfs). Le remplacement d'initialisation "upstart" ignore en effet cette option.
1
@ ring0: J'avoue que la page de manuel est mal formulée. Il y a un avertissement de texte qui est envoyé immédiatement, mais il est envoyé à connectés les utilisateurs , et non pas les processus. Ensuite, il attend l'heure d'envoi pour envoyer à la fois SIGTERM et SIGKILL, en attendant l'heure indiquée par l'argument -t. Dans le contexte, l'avertissement auquel il est fait référence signifie en réalité le signal d'avertissement de SIGTERM - les seuls processus d'avertissement pouvant recevoir des signaux sont des signaux.
0

Afin d’avoir un délai spécifique entre SIGTERM et SIGKILL, vous pouvez spécifier trois commandes dans un script en tant que root.

kill -SIGTERM -1
sleep 20
kill -SIGKILL -1

à

  • envoyer SIGTERM à tous les processus (sauf 1),
  • attendez 20 secondes, puis
  • envoyer le -9signal pour tuer immédiatement les processus restants,

mais cela tuerait vos propres processus, votre shellinterprète ...
Développer un script (par exemple en Perl) pour lister tous les processus, puis pour ne tuer que les processus qui ne nuisent pas à votre propre script, et le démarrer à l'intérieur nohuppour l'attacher au père 1processus de tous , ferait le travail.

Une autre solution consiste à télécharger la source de shutdown(ou halt) et à voir comment cela fonctionne. L'ajout d'un délai fixe ou facultatif entre l'envoi des deux signaux ne devrait pas être trop difficile.

Ø de bague
la source
C'est probablement le plus proche d'une solution. J'ai déjà modifié /etc/rc.d/init.d/halt et mis une pause plus appropriée entre l'envoi de SIGTERM et SIGKILL. Le seul problème est que c'est codé en dur.
S2cuts