Avec le rythme accéléré du travail et de la vie, nous devons souvent fixer des limites de temps dans les systèmes Linux pour contrôler notre comportement. Qu'il s'agisse de limiter le temps de connexion des utilisateurs ou le temps d'exécution des processus, les systèmes Linux proposent diverses méthodes pour atteindre cet objectif. Alors, savez-vous comment définir une limite de temps sur le système Linux ? Cet article présentera plusieurs méthodes courantes afin que vous puissiez facilement les maîtriser.
timeout est un utilitaire de ligne de commande qui exécute une commande spécifiée et la termine si elle est toujours en cours d'exécution après une période de temps donnée. La commande timeout fait partie du package utilitaire principal GNU, installé dans presque toutes les distributions Linux
Comment utiliser
Format de grammaire :
timeout [OPTION] DURATION COMMAND [ARG]...
DURATION peut être un nombre entier positif ou à virgule flottante, suivi d'un suffixe facultatif :
Si vous n’ajoutez aucune unité, la valeur par défaut est les secondes. Si DURATION est 0, le délai d'attente associé est désactivé.
Instances
Terminez l'opération ping après 5 secondes :
[root@localhost ~]# timeout 5 ping www.baidu.com PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data. 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=55 time=16.3 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=2 ttl=55 time=16.0 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=3 ttl=55 time=16.7 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=4 ttl=55 time=16.0 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=5 ttl=55 time=17.6 ms
Terminez l'opération ping après 5 minutes :
[root@localhost ~]# timeout 5m ping www.baidu.com
Terminer l'opération ping après 1 jour :
[root@localhost ~]# timeout 1d ping www.baidu.com
Terminez l'opération ping après 2,5 secondes :
[root@localhost ~]# timeout 2.5s ping www.baidu.com PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data. 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=14.9 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=15.6 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=55 time=15.6 ms
Envoyer le signal spécifié
Si aucun signal n'est donné, timeout envoie un signal SIGTERM à la commande gérée lorsque le délai est atteint. Le signal à envoyer peut être spécifié à l'aide de l'option -s (-signal).
Envoyez le signal SIGKILL à la commande ping, terminez après 5 secondes :
[root@localhost ~]# sudo timeout -s SIGKILL 5s ping www.baidu.com PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data. 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=55 time=17.2 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=2 ttl=55 time=16.6 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=3 ttl=55 time=16.7 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=4 ttl=55 time=16.2 ms 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=5 ttl=55 time=16.7 ms Killed
Un signal peut se voir attribuer son nom ou son numéro de séquence. Le numéro de série SIGKILL utilisé ci-dessous mettra fin à l'opération après 5 secondes :
[root@localhost ~]# sudo timeout -s 9 5s ping www.baidu.com PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data. 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=15.5 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=16.3 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=55 time=14.9 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=55 time=16.0 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=5 ttl=55 time=22.0 ms Killed
Pour voir tous les signaux disponibles, utilisez la commande kill -l pour afficher tous les signaux.
[root@localhost ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [root@localhost ~]#
Arrêtez le processus bloqué
SIGTERM, le signal par défaut envoyé lorsque le délai est dépassé, peut être détecté ou ignoré par certains processus. Dans ce cas, le processus continue de s'exécuter après l'envoi du signal de fin.
Pour vous assurer que la commande exécutée est terminée, utilisez l'option -k (–kill after) suivie d'une heure. Il sera forcé de se terminer lorsque le délai imparti sera atteint.
Dans l'exemple ci-dessous, la commande timeout s'exécute pendant une minute et mettra fin à la commande après 10 secondes si elle ne se termine pas :
[root@localhost ~]# timeout -k 10s 1m sh test.sh
Courir au premier plan
Par défaut, timeout exécute les commandes gérées en arrière-plan. Si vous souhaitez exécuter la commande au premier plan, utilisez l'option --foreground :
[root@localhost ~]# timeout --foreground 5m ./script.sh
Résumé
Cet article présente plusieurs méthodes courantes pour définir des limites de temps dans les systèmes Linux, notamment l'utilisation de la commande ulimit, l'utilisation du module pam_time, l'utilisation des tâches planifiées cron, etc. En comprenant ces méthodes, vous pouvez mieux contrôler le comportement des utilisateurs, optimiser les performances du système, éviter le gaspillage de ressources, etc. J'espère que les lecteurs pourront choisir une méthode qui leur convient en fonction de leurs besoins réels et l'appliquer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!