Je fais un script bash pour mon usage. Comment puis-je exécuter une commande pendant un certain temps, comme 20 secondes et terminer la commande? J'ai essayé beaucoup de solutions mais rien ne fonctionne, j'ai aussi essayé la commande timeout sans succès. Veuillez me donner une solution pour cela.
par exemple: je veux exécuter cette commande dans le script et le terminal après 10 secondes
some command
some command > logfile &
la première ligne. Ensuite, vous pouvez analyserlogfile
.À l'invite bash, vous pouvez utiliser "
your_command & sleep 20; kill $!
aptget install timeout
ettimeout -k 3m 14s your_command
expect
comme expliqué ici: /unix/43340/how-to-introduce-timeout-for-shell-scriptingperl -e "alarm 10; exec @ARGV" "Your_command"
$COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID
( Source et explication )la source
Une autre façon consiste à utiliser pgrep $ pattern ou pkill $ pattern; renvoie tous les PID correspondant au modèle donné, en parcourant tous les processus en cours d'exécution sur la machine. Donc, pour limiter la portée des PID à ceux que vous possédez, utilisez: pgrep -P $ mypid $ pattern, ou pkill -P $ mypid $ pattern
Donc, pour exécuter un processus d'arrière-plan pendant une durée définie, votre script ressemblerait à ceci:
Gardez à l'esprit que cela va tuer tous les processus avec le même modèle de nom s'exécutant sous le PID parent actuel. Vous pouvez donc l'utiliser pour démarrer plusieurs processus et les tuer tous simultanément après un certain temps.
la source
Vous pouvez utiliser un réveil en ligne de commande comme ebay-alarm
Installez le script de réveil et faites
ebay-alarm 10 sec -c some command &
la source