← Назад к вопросам
Какие особенности разработки под Linux и какие инструменты используешь?
1.0 Junior🔥 151 комментариев
#Linux и операционные системы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разработка C/C++ Backend под Linux
Linux — это золотой стандарт для backend разработки. Требует понимания системных уровней, сетевого программирования и правильного выбора инструментов для production-ready приложений.
Особенности Linux разработки
Различия от Windows:
- Путі: forward slash
/, переменные окружения через bash - Разрешения: chmod, владельцы файлов, sudo для привилегий
- Сигналы: SIGTERM, SIGKILL, SIGSEGV — нужно обрабатывать graceful shutdown
- Многопроцессность: fork/exec вместо CreateProcess
- Сокеты: Unix domain sockets для IPC быстрее чем TCP
- Системные вызовы: epoll/kqueue для асинхронного I/O
#include <signal.h>
#include <unistd.h>
void signal_handler(int sig) {
if (sig == SIGTERM) {
// Graceful shutdown
cleanup();
exit(0);
}
}
int main() {
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
// ...
}
Инструменты разработки
Компиляторы и сборка:
- gcc/g++ — стандартный компилятор Linux
- clang — лучше диагностика ошибок, совместимость с gcc
- cmake — кроссплатформенная система сборки (современный стандарт)
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
- make — классический инструмент (Makefile)
- ninja — быстрая альтернатива make
Отладка:
-
gdb — GNU debugger, standard
gdb ./program (gdb) break main (gdb) run (gdb) print variable (gdb) backtrace -
valgrind — детектор утечек памяти и ошибок
valgrind --leak-check=full --show-leak-kinds=all ./program -
AddressSanitizer — встроенный в компилятор
gcc -fsanitize=address -g program.cpp ./a.out # Сразу видны memory violations
Профилирование:
-
perf — Linux profiler
perf record ./program perf report # Где тратится время -
gprof — GNU profiler
gcc -pg program.cpp ./a.out gprof a.out gmon.out
Статический анализ:
- cppcheck — проверка на типичные ошибки
- clang-analyzer — интегрирован в clang
- SonarQube — enterprise solution
Системное программирование
Работа с процессами:
#include <unistd.h>
#include <sys/wait.h>
pid_t pid = fork();
if (pid == 0) {
// Дочерний процесс
execve("/bin/ls", args, env);
} else {
// Родительский процесс
int status;
waitpid(pid, &status, 0);
}
Асинхронный I/O с epoll:
#include <sys/epoll.h>
int epoll_fd = epoll_create1(0);
epoll_event events[10];
while (true) {
int n = epoll_wait(epoll_fd, events, 10, -1);
for (int i = 0; i < n; ++i) {
if (events[i].events & EPOLLIN) {
// Данные готовы к чтению
handle_read(events[i].data.fd);
}
}
}
Unix domain sockets (IPC):
int sock = socket(AF_UNIX, SOCK_STREAM, 0);
sockaddr_un addr = {};
strcpy(addr.sun_path, "/tmp/socket.sock");
addr.sun_family = AF_UNIX;
bind(sock, (sockaddr*)&addr, sizeof(addr));
listen(sock, 5);
// Намного быстрее TCP localhost
Инструменты мониторинга
- htop — process monitor с красивым UI
- iotop — мониторинг дисковых операций
- nethogs — сетевой трафик по процессам
- systemd-analyze — профилирование старта системы
Версионирование и CI/CD
# GCC версия
g++ --version
# Компиляция с флагами
g++ -Wall -Wextra -O2 -std=c++17 program.cpp
# Static linking
g++ -static program.cpp -o binary
# Dynamic linking с RPATH
g++ -Wl,-rpath,/path/to/lib program.cpp
Production практики
Логирование:
- Используй syslog для системных приложений
- Структурируй логи (JSON format для парсинга)
- Разделяй уровни: DEBUG, INFO, WARNING, ERROR, CRITICAL
Graceful shutdown:
std::atomic<bool> running = true;
void signal_handler(int sig) {
running = false;
}
int main() {
signal(SIGTERM, signal_handler);
while (running) {
process_task();
}
cleanup_connections();
flush_buffers();
}
Resource limits:
ulimit -n 65536 # File descriptors
ulimit -s unlimited # Stack size
Контейнеризация:
- Docker часто используется для development
- Linux namespaces и cgroups для изоляции ресурсов
Линукс разработка требует глубокого понимания ОС, но даёт максимальный контроль и производительность для backend систем.