Nested Port Forward

Самый простой; он разрешает трафик в обоих направлениях, если вы сначала что-то запрашиваете. Вы, вероятно, не можете выполнить эхо-запрос, потому что состояние не разрешает никаких возвращаемых данных.

См .: Состояния земли пользователя

1
01.11.2018, 02:37
2 ответа

Тест не является простым тестом на успешность выполнения команды. Когда процесс завершается с помощью SIGINT, его статус выхода можно прочитать с помощью wait(2). Используя WIFSIGNALEDи WTERMSIG, bash может определить, был ли дочерний процесс (в данном случае sudo )уничтожен непосредственно сигналом или нет.

Вот результат этого системного вызова при нажатии Ctrl+C вcat(согласноstrace):

wait4(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0, NULL) = 9357

А вот результат при нажатии Ctrl+C вsudo -S sleep 4:

wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 9479

Для полноты картины вот результат нажатия Ctrl+Cping localhost:

wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 9710
1
27.01.2020, 23:42

Судя по всему, команда sudoобрабатывает сигнал INT так, что он просто завершает работу, в отличие от, например,. sleep. Таким образом, Bash считает, что ему не нужно уничтожать себя в своем обработчике по умолчанию для SIGNIT :

.

bash is among a few shells that implement a wait and cooperative exit approach at handling SIGINT/SIGQUIT delivery. When interpreting a script, upon receiving a SIGINT, it doesn't exit straight away but instead waits for the currently running command to return and only exits (by killing itself with SIGINT) if that command was also killed by that SIGINT. The idea is that if your script calls vi for instance, and you press Ctrl+C within vi to cancel an action, that should not be considered as a request to abort the script.

Вы можете переопределить это поведение, определив ловушку для SIGINT:

trap 'trap - INT; kill -s INT $$' INT

Ссылка:https://mywiki.wooledge.org/SignalTrap(Главы 4 и 5)

1
25.03.2020, 07:10

Теги

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