TG Telegram Group & Channel
DevOps | United States America (US)
Create: 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, если только вы намеренно не хотите завершить текущий процесс оболочки.

🧠 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, если только вы намеренно не хотите завершить текущий процесс оболочки.


>>Click here to continue<<

DevOps




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)