Obtenir pid du script bash à partir de lui-même

J'ai un script bash avec beaucoup de choses appelées script.sh :

 #!/bin/bash #It #Is #Doing #Things 

Y a-t-il un moyen d'get le traitement du script et de le tuer après 5 minutes?

Comme:

 #!/bin/bash #Now here give pid of script.sh then kill it after 5 minutes #It #Is #Doing #Things 

mettre à jour

Imagin j'ai ce script:

 #!/bin/bash while : do echo "line printed" done 

Si nous utilisons ces réponses, il ne montre pas la sortie …

Je veux sortir mettre être imprimé et après 5 minutes cntrl + c signal tuer le process de bash …

Est-ce une bonne idée?

 PID=$$ kill -SIGINT $PID 

Où devrait-on mettre?

Si vous voulez toujours que le script expire après 5 minutes, vous pouvez simplement utiliser un bloc dans un process d'arrière-plan comme celui-ci. Si vous utilisez Ctrl+C pendant son exécution, le process d'arrière-plan se termine également:

 #!/bin/bash { sleep 5m kill $$ } & while true do date sleep 1 done 

Vous obtenez le PID avec PID=$$ .

Ce que vous voulez peut être plus facilement réalisé avec le timeout la command.

Mais vous pouvez également exécuter un process d'arrière-plan:

 (sleep $TIMEOUT && kill "$PID") & 

L'utilitaire timeout qui fait partie de GNU coreutils le fait pour vous:

 timeout 5m bash script.sh 

mettrait fin au script après 5 minutes d'exécution.

Vous pouvez changer votre boucle en:

 #!/bin/bash - while ((SECONDS < 5*60)) do echo "line printed" done 

Ou insert ((SECONDS < 5*60)) || exit ((SECONDS < 5*60)) || exit dans votre boucle la plus profonde.

SECONDS dans ksh , zsh et bash est une variable spéciale qui contient le nombre de secondes depuis le démarrage du shell.

Vous pouvez utiliser une condition de vérification:

 #!/bin/bash START=$(date +%s) while [[ $(($(date +%s) - $START)) -ne 300 ]] do #do something here done echo QUIT 

Explication

  • date +%s get le time en secondes depuis l'époque, nous l'enregistrons dans la variable START , marquez l'heure de début du script.
  • [[ $(($(date +%s) - $START)) -ne 300 ]] : nous obtenons l'heure actuelle ( date +%s encore) soustraire à l'heure de début (qui est enregistrée dans la variable START ).
  • Si le résultat n'est pas égal à 300 (5 minutes), le script continue de s'exécuter,
  • Si le résultat est égal à 300 , le script signifiant a exécuté 5 minutes depuis l'heure de début, nous quittons la boucle while, le script se termine.