Прерывание 'Ctrl + c' для сценария удара, но не для процесса открывается в этом сценарии

Ах, неважно, я наконец нашел проблему - Atlassian добавили собственный сценарий оболочки Xvfb (/ usr / local / bin / Xvfb), который блокировал отправку сигнала. Для тех, у кого в будущем возникнет эта проблема, проверьте, выполняется ли Xvfb напрямую или через оболочку, и если это оболочка, это нарушит работу xvfb-run.

11
24.09.2018, 12:17
3 ответа

Вы должны использовать trap true 2или trap : 2вместо trap '' 2. Вот что говорит об этом «help trap» в оболочке bash:

If ARG is the null string each SIGNAL_SPEC is ignored by the shell and by the commands it invokes.

Пример:

$ cat /tmp/test
#! /bin/sh
trap : INT
cat
echo first cat killed
cat
echo second cat killed
echo done
$ /tmp/test
   <press control-C>
^Cfirst cat killed
   <press control-C>
^Csecond cat killed
done
13
27.01.2020, 19:57


Когда вы используете Crtl + C , вы прерываете программу (" kill " it ).
То, что вы, вероятно, ищете, это приостановить вашу программу (" приостановить " ее ). Для этого можно использовать Crtl+Z.
Как только ваша программа будет приостановлена, вы можете увидеть ее, используя jobs. Например:
[1]+ Stopped ./foobar
Здесь у меня только одно задание, задание #1, но -их может быть больше одного, у каждого задания есть свой номер.
Вы можете управлять приостановленным процессом с помощью ряда команд, например bg, fgи kill.
bg %1перезапустит задание #1 в b подтверждение g раунд
fg %1перезапустит задание #1 в раунде f ore g
kill %1убьет задание #1
Обратите внимание, что вы можете использовать bgи fgбез аргументов, если у вас есть только одно активное задание.

-1
27.01.2020, 19:57

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

#!/bin/bash
# make the shell (and its children) ignore SIGINT
trap '' INT
.
.
.
# but this child won't ignore SIGINT
(trap - INT; my_program)
# the rest of the script is still ignoring SIGINT
.
.
.
12
27.01.2020, 19:57

Теги

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