tgoop.com/DevOPSitsec/1565
Create:
Last Update:
Last Update:
🧠 DevOps-задача: неочевидное поведение `exec` в Bash
❓ Вопрос: что произойдёт при выполнении следующего скрипта?
#!/bin/bash
echo "Start script"
exec sleep 10
echo "This will never be printed"
🔍 Варианты:
• a) Скрипт выведет обе строки и "заснёт"
• b) Скрипт выведет только первую строку
• c) Скрипт ничего не выведет
• d) Скрипт завершится с ошибкой
💡 Разбор:
Команда
exec
в Bash заменяет текущий процесс оболочки на указанную команду — в данном случае, sleep 10
. Это значит:• строка
echo "Start script"
выполнится • строка
exec sleep 10
заменит текущий процесс на sleep
• строка
echo "This will never be printed"
никогда не будет выполнена, потому что процесс уже заменён✅ Правильный ответ: b) Скрипт выведет только первую строку
📌 Вывод:
exec
— мощная, но коварная команда. Она не запускает процесс в фоне, а заменяет текущий, без возврата. Это может использоваться в:• заменах PID 1 в контейнерах
• написании минималистичных init-оболочек
• утечках в long-running скриптах, если
exec
используется не по назначению🛠️ Совет: если вы хотите просто запустить команду — не используйте
exec
, если только вы намеренно не хотите завершить текущий процесс оболочки.BY DevOps
Share with your friend now:
tgoop.com/DevOPSitsec/1565