2016-02-07 3 views
0

J'appelle un processus de conversion vidéo dans un do ... while qui boucle sur un ensemble de fichiers.timeout pour le processus bloqué

La plupart du temps, cela fonctionne comme prévu, mais parfois le processus se bloque sur un fichier et ne bouge pas jusqu'à ce que je le tue. (Il n'est donc pas insensible en tant que tel - juste inutile!)

Il envoie toujours à stdout et stderr, où je peux voir qu'il essaie de lire le même index encore et encore. Je peux aussi voir qu'il n'enregistre aucune sortie dans un fichier de destination (donc ça ne sert à rien).

Can I:

  • stdout moniteur et/ou stderr pour les éléments répétitifs et quitter le processus si elle le fait plus d'un certain nombre de fois; ou

  • surveiller le fichier de destination et quitter le processus s'il n'existe pas après un délai d'expiration; ou

  • quitter le processus s'il ne parvient pas à terminer après un délai d'expiration?

+1

La troisième question (quitter le processus après le délai d'attente) a une réponse ici: http://stackoverflow.com/questions/5161193/bash-script-that-kills-a-child-process-after-a-given-timeout –

+1

La deuxième question (vérifier le fichier et quitter après un certain temps) peut être fait avec un simple 'for' /' while' + 'sleep' +' [-f ...] '+' kill' –

+0

Merci. Cela ressemble à des choses utiles pour moi. – Lorccan

Répondre

1

Si le processus de conversion vidéo est développé par vous alors la meilleure solution serait de résoudre le problème de boucle infinie. À partir d'une perspective de gestion des erreurs ou si le processus est un processus tiers, vous pouvez rediriger la sortie vers un fichier, puis vérifier périodiquement le fichier à la recherche de messages d'erreur spécifiques à partir du journal, puis le supprimer. Si le processus doit traiter un fichier sur une période spécifique, vous pouvez le supprimer si la conversion n'est pas terminée dans le délai spécifié.

+0

C'est une tierce partie, donc je dois contourner le problème. Je suppose que le problème est que je ne peux pas comprendre comment - si le processus ne se termine pas - je peux arriver à le surveiller et à le tuer, mais je pense que je dois regarder ce que http://stackoverflow.com/users/1913824/andrea-corbellini fourni pour voir si je peux le faire fonctionner. – Lorccan

+0

vous pouvez utiliser la variable "SECONDS" pour mesurer le délai. L'exemple est ici. http://stackoverflow.com/questions/5152858/how-can-i-measure-a-duration-in-seconds-in-a-linux-shell-script –

+0

Merci. Cela permet de montrer facilement ce que je ne comprends pas: si je 1. commence l'enregistrement du temps, 2. fais quelque chose, 3. arrête l'enregistrement (et calcule l'intervalle), comment dois-je faire 3. si 2. jamais complète? – Lorccan