Comment arrêter l'ordinateur une fois la tâche terminée?
25
Je commence généralement un téléchargement avant d'aller à l'école.
Quelle commande dois-je utiliser pour effectuer automatiquement les sauvegardes nécessaires et éteindre l'ordinateur une fois une tâche particulière terminée?
(Par exemple, après avoir installé les mises à jour ou après avoir téléchargé un fichier volumineux.)
wget http://..../somelargefile || halt- haltsera exécuté en cas d' wgeterreur de retour
Une alternative à cela consiste à utiliser kshutdown- dans cette application, vous pouvez spécifier quelle action doit être effectuée (redémarrage / arrêt / hibernation / etc ou exécution de la commande) et quand (après un certain temps ou lorsqu'une autre application se ferme). Si vous souhaitez utiliser cet outil, vous devez choisir le processus correct - certains utilitaires de mise à jour démarrent quelques sous-processus.
Vous pouvez également donner shutdownun temps d'attente; pas besoin d'utiliser kshutdown à cet effet.
Cascabel
1
Non, mais shutdownn'a aucun moyen d'attendre un événement réel.
Shadur
18
Chaque processus a un répertoire nommé en fonction de son identifiant de processus (pid) dans le procsystème de fichiers. Par conséquent, vous pouvez attendre la fin d'un processus spécifique en vérifiant si son répertoire existe à plusieurs reprises.
Vous pouvez l'utiliser pour effectuer un arrêt du système après la fin du processus comme ceci (remplacez 2296 par le pid à attendre):
su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'
Avantages:
Vous pouvez décider d'arrêter ou non après avoir désactivé la commande shell
L'arrêt est émis en tant que root, la commande à attendre n'est pas nécessairement effectuée en tant que root (pas besoin de contourner l' sudoinvite de fin de mot de passe).
Désavantages:
Il peut arriver que votre processus se termine et que le système d'exploitation réutilise ensuite le même pid pour un processus nouvellement généré dans cette seconde (condition de concurrence critique). Vous devez donc continuer à attendre la fin de ce nouveau processus.
Point principal: Cela fonctionne même si le processus a commencé.
Heisenberg
Si vous avez commencé quelque chose à partir d'un terminal que vous avez encore ouvert psdans ce même terminal, cela devrait vous aider à repérer le PID pour le CMD. Si le processus était / est dans un autre terminal, pipping la sortie ps pour tout via grep pour filtrer votre commande devrait vous aider à le trouverps -elf | grep <command_related_word>
TafT
Mieux vaut vérifier ma réponse basée sur le processuspgrep aka grep ...
Gilles Quenot
Comment puis-je mettre cette commande en arrière-plan?
Vous pouvez utiliser les opérateurs &&et ||pour enchaîner les commandes. Par exemple:
apt-get update && sleep 2 && init 0
qui effectuera une mise à jour du système à l'aide d'aptitude, attendez 2 secondes et passez au niveau d'exécution 0, selon votre système, cela peut ou non éteindre le matériel.
Pour parler d'une ou plusieurs opérations à la suite d'une opération plus arbitraire, comme un navigateur Web, vraisemblablement, le téléchargement, vous auriez besoin d'une logique supplémentaire pour regarder le fichier de téléchargement afin de vérifier que le téléchargement est en fait terminé, cependant, la logique du shell est inchangée.
shutdown
un temps d'attente; pas besoin d'utiliser kshutdown à cet effet.shutdown
n'a aucun moyen d'attendre un événement réel.Chaque processus a un répertoire nommé en fonction de son identifiant de processus (pid) dans le
proc
système de fichiers. Par conséquent, vous pouvez attendre la fin d'un processus spécifique en vérifiant si son répertoire existe à plusieurs reprises.Vous pouvez l'utiliser pour effectuer un arrêt du système après la fin du processus comme ceci (remplacez 2296 par le pid à attendre):
Avantages:
sudo
invite de fin de mot de passe).Désavantages:
la source
ps
dans ce même terminal, cela devrait vous aider à repérer le PID pour le CMD. Si le processus était / est dans un autre terminal, pipping la sortie ps pour tout via grep pour filtrer votre commande devrait vous aider à le trouverps -elf | grep <command_related_word>
pgrep
aka grep ...Vous pouvez utiliser les opérateurs
&&
et||
pour enchaîner les commandes. Par exemple:qui effectuera une mise à jour du système à l'aide d'aptitude, attendez 2 secondes et passez au niveau d'exécution 0, selon votre système, cela peut ou non éteindre le matériel.
Pour parler d'une ou plusieurs opérations à la suite d'une opération plus arbitraire, comme un navigateur Web, vraisemblablement, le téléchargement, vous auriez besoin d'une logique supplémentaire pour regarder le fichier de téléchargement afin de vérifier que le téléchargement est en fait terminé, cependant, la logique du shell est inchangée.
la source
Si vous souhaitez surveiller un processus déjà démarré, vous pouvez le faire dans un shell :
la source
Il existe une application, nommée sentinella qui peut le faire pour vous avec son interface graphique:
pour l'installer:
la source