web-dev-qa-db-fra.com

démarrer et tuer le processus evince en boucle

J'ai certains fichiers PDF. Je veux inspecter chacun d'eux pendant 20 secondes. La façon dont j'essayais de le faire est la suivante: for file in *.pdf; do echo $file; evince $file; sleep 20s; killall evince; done. Il affiche le premier fichier, mais ne le tue pas après 20s. Qu'est-ce qui ne va pas ici?

3
rivu

Je pense que vous avez juste oublié d'exécuter evince en arrière-plan:

for file in *.pdf; do echo $file; evince $file &; sleep 20s; killall evince; done

Remarquez le & après la commande evince.

1
Rmano

Notez que vous n'avez pas à tout tuer: vous pouvez tuer l'instance spécifique:

for file in *.pdf; do
    echo "$file"
    evince "$file" &
    sleep 20s
    kill $!           
done

$! est le pid du dernier processus en arrière-plan. ( http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters )

2
glenn jackman