Программы, отрабатывающие в командной строке, никогда не должны зависать. Если они что-то сделать не могут, то надо выдавать сообщение об ошибке и завершаться.

Почему? Потому что вызов может быть частью более сложной системы. Это задача скрипта -- выяснить, что не получилось, и отработать ошибку. А задача программы -- не нарушить остальную систему.

Записать этот тезис меня сподвигла такая программа, как mediainfo.exe . Я решил ей обработать определённый каталог. Я написал короткий бат-файл с командой for, которая обходила все файлы по дереву и сдавала их mediainfo.exe, а вывод этой команды отправлялся в файл. Что могло пойти не так?

Файлов в папке было много, разных типов. Конечно, не все из них являлись медиа. Но сидеть и думать над списком расширений -- это не моё. Я обработал все файлы. Медиаинфо нормально относится к тому, что ему дают не-медиа файл. В этом случае он выводит только его размер. Я думал, что проблем возникнуть не может. Но они возникли.

Среди файлов нашёлся один не-медиа-файл, который не обрабатывался. Медиаинфо на нём просто зависал без выдачи каких-либо сообщений. Я пошёл гуглить, и обнаружил, что этот случай не единичный. Пользователи периодически жалуются разработчику в том числе и на медиа-файлы, на которых медиаинфо зависает. Далее они отправляют файл разработчику, он что-то исправляет, и в следующей версии всё нормально.

Пока не найдётся следующий такой файл.

Это означает, что в программе систематическая проблема, при которой входной файл может её повесить. А исправляются, по-видимому, только конкретные случаи.

Не знаю. что тут можно сделать. Лучше всего -- выяснить, в чём корень проблемы. Но если это невозможно... сделать отдельный поток с watchdog-таймером?..