Печать между строками 7-13, которые содержат определенный ряд (сценарий awk)

Вы можете использовать exiftool для управления данными EXIF ​​в различных форматах файлов. Это perl-библиотека, сопровождаемая утилитой командной строки:

$ exiftool test.jpg | grep -i resolution
X Resolution                    : 72
Y Resolution                    : 72
Resolution Unit                 : inches
Focal Plane X Resolution        : 3959.322034
Focal Plane Y Resolution        : 3959.322034
Focal Plane Resolution Unit     : inches

В этом примере данные EXIF ​​говорят, что test.jpg имеет разрешение 72 × 72 dpi. Чтобы обновить эти значения, например, до 100 × 100, exiftool должен быть вызван следующим образом:

$ exiftool -XResolution=100 -YResolution=100 test.jpg
1 image files updated

И вуаля:

$ exiftool test.jpg | grep -i resolution
X Resolution                    : 100
Y Resolution                    : 100
Resolution Unit                 : inches
Focal Plane X Resolution        : 3959.322034
Focal Plane Y Resolution        : 3959.322034
Focal Plane Resolution Unit     : inches

5
30.10.2018, 18:40
2 ответа

тл;др; процесс Xvfbустанавливает обработчик сигнала для SIGINTи завершает работу, когда получает такой сигнал, но процесс sleepэтого не делает, поэтому он наследует состояние «игнорировать» для SIGINT, как это было устанавливается оболочкой, выполняющей сценарий перед выполнением двоичного файла sleep.

Когда запускается сценарий оболочки, управление заданиями отключается, а фоновые процессы (, запущенные с помощью &), просто запускаются в той же группе процессов, при этом SIGINTи SIGQUITустанавливаются вSIG_IGN(игнорируются )и их стандартный ввод перенаправляется с /dev/null.

Это требуется стандартом :

If job control is disabled (see the description of set -m) when the shell executes an asynchronous list, the commands in the list shall inherit from the shell a signal action of ignored (SIG_IGN) for the SIGINT and SIGQUIT signals.

Если расположение сигнала установлено наSIG_IGN(игнорировать ), это состояние будет унаследовано через fork()и execve():

.

Signals set to the default action (SIG_DFL) in the calling process image shall be set to the default action in the new process image. Except for SIGCHLD, signals set to be ignored (SIG_IGN) by the calling process image shall be set to be ignored by the new process image.

10
27.01.2020, 20:33

Bash не пересылает такие сигналы, как SIGINT или SIGTERM, процессам, которых он в данный момент ожидает.

Одним из распространенных обходных путей является ожидание прерывания, как показано в следующем примере.:

int_handler()
{
    kill -TERM "${child_pid}" > /dev/null 2>&1
}

trap 'int_handler' INT

echo "Sleeping... "
sleep 200 &

child_pid=$!
wait ${child_pid} > /dev/null 2>&1
trap - INT
wait ${child_pid} > /dev/null 2>&1
1
27.01.2020, 20:33

Теги

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