Tuer le processus après avoir été autorisé à courir pendant un certain temps

Je veux limiter l'heure à laquelle une commande de processus grep est autorisée à s'exécuter ou à être en vie.

Par exemple. Je souhaite effectuer les opérations suivantes:

 grep -qsRw -m1 "parameter" /var 

Mais avant d'exécuter la commande grep je souhaite limiter la durée de vie du processus grep , disons plus de 30 secondes.

Comment puis-je faire cela?

Et si cela est possible, comment puis-je revenir ou réinitialiser pour ne plus avoir de limite de temps après.

Vous pouvez utiliser timelimit , il est disponible dans l'ubuntu par défaut ou vous pouvez le compiler vous-même.

Timelimit exécute une commande et termine le processus généré après un temps donné avec un signal donné. Un signal "d'avertissement" est envoyé en premier, puis, après un délai d'attente, un signal "kill", similaire à la façon dont init (8) fonctionne à l'arrêt.

Voici un peu frappé bash pour cela:

 grep -qsRw -m1 "parameter" /var & GREPPID=$! ( sleep 30; kill $GREPPID ) & fg $GREPPID 

Fondamentalement, il commence la recherche en arrière-plan, puis commence un sous-ensemble qui attend 30 secondes puis tue le processus de recherche. Si la recherche prend <30s, le processus sera déjà mort. Ce n'est pas une excellente idée de tuer un processus qui est déjà mort car il y a une très petite chance que quelque chose d'autre réutilise le pid, mais pour quelque chose comme ça, il est généralement acceptable. Enfin, la recherche est remise au premier plan et se déroulera jusqu'à ce qu'elle finisse ou soit tuée.

Créez un nouveau fichier appelé "tgrep" et mettez le suivant (ou appelez ce que vous voulez):

 #!/bin/bash grep $@ & PID=$! sleep 30 && kill $PID 2>/dev/null & wait $PID exit 0 

Ensuite, exécutez chmod a+x tgrep . Maintenant, si vous voulez l'utiliser, vous pouvez taper

 ./tgrep -i "results" /home/dan/*txt 

Ou vous pouvez simplement l'utiliser comme tgrep (sans le ./ et pouvoir l'utiliser à partir de n'importe quel répertoire) si vous le placez dans un répertoire contenu dans votre variable $ PATH (comme / home / dan / bin /, si cela se trouve dans Votre variable $ PATH, sinon vous pouvez l'ajouter).