Comment arrêter un ordinateur instantanément (1 à 5 secondes) sans utiliser de commutateur / socket physique?

17

Existe-t-il une commande / un programme par lequel je peux arrêter mon système instantanément (1 à 5 secondes)?

Mise à jour (2015): Merci à ceux qui ont suggéré de désactiver l'utilisation de la prise de courant. :RÉ

Mise à jour (2016): @technophile a suggéré que je devrais ajouter des informations à la question décrivant la nature du problème - principalement le scénario que j'essayais de résoudre. Voici le scénario pour lequel cette question a été posée il y a quelques années.

Nous construisions un système à déployer dans des espaces publics comme (aéroports, hôtels, etc.). Les gens peuvent utiliser ce système pour surfer sur Internet, vérifier leurs e-mails ou même leurs réservations, etc. en utilisant leurs cartes de crédit. Le système construit s'assurait qu'un deuxième utilisateur ne pouvait en aucun cas obtenir des informations (e-mail, cartes de crédit) de l'utilisateur précédent de ce système, même si des types de logiciels enregistreurs de frappe étaient en quelque sorte installés. Comment le système s'en assurait-il? Eh bien, les détails ne peuvent pas être partagés car ce ne sont pas des informations publiques. mais nous avons développé un moyen d'avoir toujours un nouveau système d'exploitation (comme s'il était nouvellement installé) pour un nouvel utilisateur du système. Le seul problème est que nous avons dû arrêter la machine et la remettre en marche dès que le premier utilisateur quitte la machine.

Et je voulais que cet arrêt soit instantanément rapide (- c'est pourquoi la question) et le prochain démarrage aussi très rapide pour lequel j'ai recherché et essayé un grand nombre de distributions Linux de Damn Small Linux à Slackware à Debian etc. mais c'est un histoire distincte.

choc
la source
1
Étant donné que le code le plus rapide est celui qui ne fonctionne pas, je dirais que le moyen le plus rapide d'arrêter un système n'est pas de le mettre sous tension. Expliquez ce que vous essayez de réaliser si vous avez besoin d'une réponse spécifique.
Dmitry Grigoryev
2
@ Sam152 quel mur?
choc
Vouliez-vous également spécifier «sans endommager mon système», ou n'est-ce pas un problème?
Technophile
@Technophile n'est pas un dommage permanent à mon système bien sûr. Mais à quoi pensez-vous?
choc
Mon but est de clarifier ce que vous demandez et ce que vous essayez de faire. Je travaille en électronique; signifie "instantanément" 1 seconde? 1 ms? 1us? 1ns? Êtes-vous simplement impatient ou avez-vous un besoin spécifique? Quelles sont les conséquences d'un arrêt (par exemple) de 6 secondes? Je travaille avec un système intégré qui corrompt sa carte SD si l'arrêt dépasse 5 secondes lorsque le bouton d'alimentation est maintenu enfoncé. Que faites-vous?
Technophile

Réponses:

32
sudo shutdown -h now
Felix
la source
9
Cela ne ferait pas arrêter un système instantanément . ;)
Marcel Korpel
14
@Marcel Korpel: Aussi instantanément qu'on devrait le faire sans endommager son système;)
Felix
@Felix - J'entends toujours dire que Linux est un système très robuste, et qu'il ne peut pas gérer les mêmes "redémarrages durs" que mon Windows a subi? Serait surprenant;)
Gnoupi
2
@Gnoupi: Aucun système d'exploitation ne peut être construit sans une vulnérabilité à un arrêt brutal. Sinon, la réponse à la méthode d'arrêt la plus rapide serait de tirer le cordon d'alimentation.
harrymc
1
Certaines versions ont une syntaxe différente. "sudo shutdown -g0 -y -i5" (Solaris). Et bien sûr, juste pour compliquer les choses, la valeur exacte après "i" peut être différente pour l'arrêt sur différents systèmes. Je crois que c'est 0 sur beaucoup d'autres systèmes pour l'arrêt. Soupir. Je dois aimer les normes, tellement de choix!
Brian Knoblauch
14

Je ne suggère pas de faire ce qui suit si vous n'êtes pas forcé par des raisons vraiment spéciales:

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

C'est rude, brutal et cela peut être considéré comme un équivalent équivalent à débrancher le cordon d'alimentation ...

La bonne façon est shutdown -h nowd' sudoavancer en cas de besoin.
Je devrais peut-être dire la manière légale ; voir ci-dessous ou mieux tl; dr.


Quelques mots de plus , alias L'histoire, Chapitre I
Au début était l'init et ce sera jusqu'à la fin.

L'ensemble de Linux dépend du soin affectueux d' init [ 1 ] [ 2 ] . Néanmoins et non sans une certaine ingratitude, il fut un temps où l' utilisateur root du bon Dieu pouvait trahir cet amour et killcommencer soudainement avec un ordre incontournable ( -9).
( Le Book of Etiquette prescrit aux comtes, aux ducs et aux marquises les utilisateurs à invoquer avant a sudo).

Ensuite, certains sorciers ont fait un charme pour protéger init (du livre de man 2 init)

Les seuls signaux pouvant être envoyés à l'ID de processus 1, le processus init, sont ceux pour lesquels init a explicitement installé des gestionnaires de signaux. Ceci est fait pour s'assurer que le système n'est pas arrêté accidentellement.

(Nos espions rapportent [ U1 ] qu'init va gérer 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Donc, le bon utilisateur root apprend les nouvelles et modifie la commande kill -ABRT 1ou kill -SEGV 1qui génère généralement un panique du noyau et vidage de mémoire.

Cela fonctionne car init est le premier processus à s'exécuter et prend le numéro PID 1 [ 2b ] .

C'est dangereux, imprudent et vous sentez que cela annonce un mauvais présage et une malédiction, mais si vous ne pouvez pas matériellement mettre les mains et le débrancher ...

La malédiction : il n'écrira pas sur le journal, il ne tuera pas tous les processus et n'attendra pas leur fin, il n'écrira pas sur le disque dur en mettant correctement à jour les inodes et il ne démontera pas les systèmes de fichiers; cela ne me dérange même pas que cela sauvera les options des fenêtres graphiques et les historiques de shell, et bien d'autres au-delà de notre imagination ... comme nous l'avons dit, l'équivalent de débrancher l'accord de puissance ou la batterie si un ordinateur portable.


La manière correcte
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam.", Devise des Templiers.
La manière légale (correcte) est d'utiliser shutdown[ 3 ]

sudo shutdown -h now

l'arrêt permet d'arrêter le système en toute sécurité. Tous les utilisateurs connectés sont informés que le système est en panne et ...

mais avec -h noweux, ils n'auront pas assez de temps pour en faire autant ...


Quelques mots de plus , alias L'histoire, Chapitre II
Il était une fois des pas de logique ressentis du ciel au-dessus du peuple unix:

Une fois les processus système arrêtés et les systèmes de fichiers démontés, le système s'arrête / s'éteint ou redémarre automatiquement. Cela se fait à l'aide de la commande d'arrêt ou de redémarrage, qui synchronise les modifications sur les disques, puis effectue l'arrêt / la mise hors tension ou le redémarrage réels. [ 4 ]

En effet, de nos jours, nous ne faisons pas confiance plus dans l'existence des trois Moires [ 5 ] du monde Linux , reboot, poweroffet halt[ 6 ] : la science moderne de ls -l $(which poweroff halt reboot)et celui des man rebootspreads nouvelle lumière sur cet âge sombre et nous révèlent qu'il n'existe qu'une seule vraie commande qui analyse toutes leurs options afin que nous soyons enfin libres de demander des actions contredisant leurs noms de commandes! ( halt -pou reboot -ppour poweroff, shutdown -rpour reboot...)

Maintenant que tout semblait être clair et confortable pour tous, des rumeurs prétendent [ 7 ] que dans le monde souterrain de l' ensemble d'outils systemd [ 8 ] une révolution a été effectuée laissant l'ignorance du monde entier . Grâce à une armée de cales à compatibilité ascendante, nous n'avons pas remarqué du tout que le redémarrage, la mise hors tension, l'arrêt [ 6 ] et même le telinit [ 9 ] et l'arrêt [ 3 ] sont déjà tous liés au nouveau système roictctl [ 10 ]. Veuillez écouter toute l'histoire de la voix originale de JdeBP The Bard [ 9 ] car je n'ai plus de souffle.

Si vous êtes un adepte du culte Ubuntu, vous pouvez toujours rester au courant pendant un certain temps de toutes ces affirmations [ 11 ] .


La Terre du Milieu halt -f, init, telinit, la systemctl
recherche de solution plus rapide que celle correcte mais aussi sage.

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

Que vous soyez sous systemd ou non, vous devriez pouvoir arrêter l'ordinateur sans invoquer toutes les procédures de shudown correctes (et donc plus rapidement):

  1. halt -f: spécifiant l'option-f (notez que vous devez -féviter la procédure d'arrêt) avec la commande ci-dessus, avec sudo poweroff -fou peut-être même avec sudo reboot -f -h. En effet, nous pouvons lire man reboot(et équivalents) sur la nécessité de spécifier l'option -fpour éviter d'appeler l'arrêt:

    Lorsqu'il est appelé avec --force ou lorsqu'il est au niveau d'exécution 0 ou 6, cet outil appelle l'appel système reboot (2) lui-même (avec l'argument REBOOTCOMMAND passé) et redémarre directement le système .

    Sinon, cela appelle simplement l'outil shutdown (8) avec les arguments appropriés sans passer l'argument REBOOTCOMMAND.

    -f, --force N'invoque
    pas shutdown (8) et effectue à la place l'action réelle que vous attendez du nom .

  2. De plus, vous pouvez utiliser telinit [ 2b ] (ou initdirectement)

    sudo telinit 0    # or 6
    

    dire à init de changer le niveau d'exécution ... mais si oui, pourquoi ne pas le tuer directement?

  3. Sous systemd, vous pouvez utiliser l'option double imprudente --force --force

    systemctl --force --force poweroff  
    

    Lecture du manuel systemctl [ 10 ]

    -f, --force
    Lorsqu'il est utilisé avec enable, écrase tout lien symbolique conflictuel existant.
    Lorsqu'il est utilisé avec halt, poweroff,reboot ou kexec, exécuter l'opération sélectionnée sans arrêter toutes les unités. Cependant, tous les processus seront supprimés de force et tous les systèmes de fichiers sont démontés ou remontés en lecture seule. Il s'agit donc d'une option drastique mais relativement sûre pour demander un redémarrage immédiat. Si --force est spécifié deux fois pour ces opérations, elles seront exécutées immédiatement sans arrêter aucun processus ni démonter aucun système de fichiers. Avertissement: spécifier --force deux fois avec l'une de ces opérations peut entraîner une perte de données.

Ps> Inspirez-vous des variantes de la queue JdeBP The Bard [ 7 ] .

Hastur
la source
9

Vous pouvez éteindre la machine immédiatement sans synchroniser les disques en écrivant "o" dans / proc / sysrq-trigger en tant que root.

En tant que script shell, cela ressemblerait à quelque chose comme

#!/bin/sh
echo o >/proc/sysrq-trigger

Si vous avez des autorisations sur / proc / sysrq-trigger, vous n'avez pas besoin de l'activer via sysctl. Cette option affecte uniquement le déclenchement par clavier.

Je ne recommande pas de le faire sur une machine avec un système de fichiers que vous souhaitez lire plus tard.

J'utilise cela sur Google Compute Engine pour abattre des exemples de modèles juste avant la marque de dix minutes pour maximiser la rentabilité des travaux de cluster, cela fonctionne très bien.

Aaron Muir Hamilton
la source
5
C'est la meilleure réponse à cette question. OP déclare clairement qu'il souhaite arrêter le système de la même manière que s'il était débranché de l'alimentation, il ne se soucie pas des dommages ou de "le faire correctement". Je ne comprends pas pourquoi personne ne peut comprendre cela.
Petr
1
bau lieu de oredémarrer (pertinent puisque la question a été mise à jour).
Kamil Maciorowski
7

Vous devez utiliser la combinaison de touches Magic SysRqREISUB .

Répétez après moi: " Élever des éléphants est tellement ennuyeux ... "

onze81
la source
2
REISUB le redémarrera. REISUO va s'arrêter. Ou tout simplement O.
Benoit
3

Tiré d'un autre site SE:

Alt+ SysRq+ Best un redémarrage instantané, et Alt+ SysRq+ Oest un arrêt instantané.


Référence: ici

cst1992
la source
2
semble que vous avez manqué la référence, et citez votre réponse, alors je vais inverser mon vote
Francisco Tapia
Ceci est la réponse originale: askubuntu.com/a/56072
cst1992
2

Maintenez la touche marche / arrêt pendant environ 4 secondes, c'est assez rapide.

Camilo Martin
la source
1
Si vous le faites, actionner l'interrupteur d'alimentation est en fait plus rapide;)
Gnoupi
C'est la même chose que toute autre méthode d'arrêt, en supposant que le système d'exploitation gère la puissance.
harrymc
1
Si vous ne pouvez pas attendre quelques secondes et que vous allez couper le courant, utilisez un système de fichiers de journalisation comme ext3 / ext4 afin de ne pas perdre autant de données en raison d'écritures non écrites.
CarlF
Ne pas chercher un moyen non programmatique / non logiciel d'effectuer l'arrêt, sinon la suggestion @Gnoupi est beaucoup plus rapide. ;)
choc
2

Sur certaines distributions Linux, l'arrêt offre l'option -n. (Voir l' arrêt de l'homme ). Certaines distributions (comme ubuntu qui utilise upstart au lieu de sysvinit) ne supportent cependant pas son indicateur, et cet indicateur n'est pas (comme on peut l'apprendre de la page de manuel) sans risque. Bien que j'utilise cela depuis des années (sur mon ordinateur portable, je ne me soucie pas que tous les démons se terminent correctement, il veut juste que tout soit tué et que mon cache de disque soit vidé) (c'est plus rapide qu'un arrêt normal et plus sûr que de tirer le plug (et amis)). Vous pouvez voir si cela résout votre problème.

amo-ej1
la source
2

J'ai utilisé ce petit script pour éteindre le système. En fait, il est utilisé pour une farce sur une machine de "prototypage": "Hé mec, voyons ce que ce génial .sh fait!"

#!/bin/bash
echo 1 > /proc/sys/kernel/sysrq-trigger; #enables sysrq triggers
echo u > /proc/sysrq-trigger # remount the system as ready only
#edited# echo s > /proc/sysrq-trigger # sync all write-pending data to disk
sync
echo o > /proc/sysrq-trigger # shut off the system power.

(Ce script imite la même chose que percutant Alt+ SysRq+ u/ s/ ocomme expliqué précédemment.) Bien sûr i't provoquer un blocage anormal du système (tables mysql, etc peut se bloquer), utilisez donc uniquement sur les machines factices. Remarque: la synchronisation peut prendre un certain temps. J'ai vu que si le système a beaucoup de mémoire libre (pour le cache) et que vous copiez un tas de fichiers sur une clé USB, la synchronisation prend plus de temps, mais je le recommande même pour une farce.

Edit: Il vaut mieux utiliser syncau lieu d'écrire 's' sysrq-trigger: l'écriture 's' ne bloquera pas l'exécution du script, donc après avoir demandé que le cache soit écrit sur le disque, la machine s'arrêtera immédiatement. Contrairement à la synccommande, syncreviendra une fois le processus d'écriture terminé. Ainsi, l'exécution du script sera bloquée jusqu'à ce que le vidage du cache soit terminé.

Dankó Dávid
la source
1
Ne devrais-tu pas être avant «u»? Aussi, en boucle:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion