Посмотреть, запустить в фоне, остановить — и прочитать код возврата.
Посмотреть процессы: ps, pgrep
ps aux # все процессы системыps -o pid,stat,cmd -p 42 # конкретный PIDpgrep -a nginx # PID + команда по имени
ps aux — снимок всей системы: USER, PID, %CPU, %MEM, STAT, COMMAND. pgrep ищет по имени и, в отличие от ps | grep, не ловит в выдачу сам себя.
Фон: &, $! и wait
sleep 300 & # запустить в фонеecho $! # PID последнего фоновогоwait $! # дождаться его завершения
& возвращает управление сразу, процесс работает в фоне. $! — PID последнего фонового процесса: сохрани его сразу, следующий & перезапишет значение.
kill: сначала TERM, потом -9
kill 4242 # SIGTERM: вежливо, можно убратьсяkill -9 4242 # SIGKILL: ядро снимает без уборкиpgrep -a node # перед pkill — проверь, кого убьёшь
kill без номера шлёт SIGTERM — процесс может дописать данные и выйти. SIGKILL не перехватывается: недописанные файлы и незакрытые транзакции останутся. Поэтому -9 — последний аргумент.
Сигналы и trap
# TERM(15) стоп · KILL(9) насильно · INT(2) Ctrl+C · HUP(1)trap 'rm -f "$tmp"; exit' TERM INT # уборка при остановкеkill -l # весь список сигналов
SIGTERM и SIGINT перехватываемы — на этом строится graceful shutdown (docker stop и systemctl stop шлют именно TERM). SIGKILL и SIGSTOP перехватить нельзя.
Коды возврата: $? и 128+N
ls /nope; echo $? # 2 — ошибка# убит сигналом → 128 + номер:# 143 = TERM(15) · 137 = KILL(9, часто OOM) · 130 = Ctrl+C(2)
0 — успех, всё остальное — ошибка; $? хранит код последней команды. Числа выше 128 читаются как «снят сигналом»: 137 в логах CI и Docker — почти всегда нехватка памяти.
Система: top, df -h, du -sh
top # живая таблица процессов, q выходdf -h # свободное место по дискамdu -sh logs/ # сколько весит каталог
top — динамика вместо снимка ps; удобнее его htop, если установлен. df смотрит на файловые системы целиком, du — на конкретный каталог: пара для вопроса «куда делось место».