Почему Ctrl-C вел бы себя по-другому, чем уничтожают-2

Я нашел разумное рабочее решение, которое позволяет и аудио и видео быть обработанным в (нормальной) единственной передаче сценария AviSynth...

avidemux2 and avsproxy to the rescue ... avidemux2 + avsproxy к спасению!

Это имеет некоторые ограничения, как не обработка DirectShowSource () очень хорошо... DirectShowSource был удобен, потому что он автоматически обнаружил тип видео/аудио, но обычно существуют другие пути вокруг этого.

Я сделал некоторые незначительные тесты, и это представило монтаж двух текстовых панелей (использующий.AAS формат подзаголовков в unicode) и другой панели снабженного субтитрами изображения. Это, кажется, обрабатывает простое видео без любых проблем... Я должен был настроить несколько незначительных вещей, но это кажется управляемым... Это, конечно, достаточно функционально, что я продолжу его, чтобы найти, что это - причуды :)

Оба avsproxy и avidemux2 имейте интерфейсы cli и графические интерфейсы... Если я могу заставить CLI сотрудничать, то я достаточно близок к тому, чтобы заставлять AviSynth играть непосредственно в медиаплеере... avidemux2 может быть установлен "скопировать", и получающийся вывод avi может быть передан по каналу непосредственно в плеер (надо надеяться)... Это выглядит хорошим...

6
14.08.2012, 02:16
2 ответа

Одна возможность состоит в том, что программа ловит последовательность Ctrl+C. Проверьте вывод stty -a; intr установка указывает, какое сочетание клавиш (если таковые имеются) отправляет сигнал SIGINT, и isig указывает, включены ли ключи сигнала (-isig средства они отключены).

Если программа состоит из нескольких процессов, нажатие Ctrl+C отправляет SIGINT во все процессы в группе процесса. Можно получить тот же эффект путем отправки сигнала в группу процесса вместо того, чтобы отправить его в один из процессов. Чтобы отправить сигнал группе процесса, сначала определите ее лидера: это - первый процесс, который запускает все другие; если Вы выполняете группу процесса в фоновом режиме, это - PID, показанный jobs -l. PID лидера группы процесса является PGID (идентификатор группы процесса); отправьте сигнал в его отрицание. Например, если PGID является 1234, выполненным kill -INT -1234.

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

#!/bin/sh
export SOMEVAR=somevalue
…
exec /path/to/application "$@"

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

Рассмотрите то, чтобы заставлять сценарий обнаружить сигнал и передачу сигнала к приложению. Вот эскиз того, как это идет:

/path/to/application "$@" &
app_pid=$!
trap -INT 'kill -INT $app_pid'
wait $!
rm /temp/file
6
27.01.2020, 20:24

На основе вопросов @Gilles спрошенный в комментариях к моему исходному вопросу я понял что kill -2 команда, которую я отправлял, предназначалась для pid сценария обертки, который запустил приложение вместо процесса, который обрабатывает сам сигнал.

Используя pids от моего вопроса, kill -s 13405 правильно не сигнализировал о приложении, но вызове kill -s 13509 работы как ожидалось.

Теперь мой вопрос состоит в том, как я могу обновить свой сценарий обертки для распространения SIGINT к его дочерним процессам, но я создам отдельный вопрос для этого.

4
27.01.2020, 20:24
  • 1
    Для прекрасного соответствия поведению tty символа прерывания необходимо отправить SIGINT группе процесса. Вместо kill -2 $PID использовать kill -2 -$PGID. (Минус перед PGID говорит, уничтожают для интерпретации его как PGID вместо PID). Можно найти PGID с ps j. PGID совпадает с PID ведущего процесса, таким образом, Ваша команда, вероятно, заканчивает тем, что выглядела одинаково за исключением -. –  Alan Curry 14.08.2012, 02:34

Теги

Похожие вопросы