kill
менеджер процессов: по очереди, в один поток
в последнее время в fedora linux, в репозитарии Everything лежит столько всего (16-19тыс пакетов на 20 гиг)..., а этих репо на работе - 6шт. ( для f11,f12,f13 под i386 и x86_64)
имея на файлсервере 4 процессора и 2гб оперативки, запустил createrepo (genpkgmetadata.py) по ним в 6 потоков, не подумав что каждый процесс захочет отожрать 1,3гб для личных нужд.
пришлось всё застопить (kill -SIGSTOP), дать операционке больше свопа чтобы там сидели застопленные процессы, и запускать их по одному.
родился такой однострочник:
for pid in `pgrep genpkgmetadata` ; do kill -SIGCONT $pid ; while kill -0 $pid ; do sleep 1 ; done ; done
Мониторинг процессов с помощью kill
Если у вас есть ID процесса, но вы не уверены правильный ли он, можно воспользоваться на первый взгляд самым последним средством: командой kill. Сигнал 0 является специальным и возвращаемое значение kill говорит о том, может ли сигнал быть отослан нужному процессу.
Кто занял apt базу?
Иногда при попытке использования apt случается такое:
ramok ~/ sudo apt-get update
E: Не могу получить доступ к файлу блокировки /var/lib/apt/lists/lock - open (11 Ресурс временно недоступен)
E: Невозможно заблокировать каталог со списками пакетовЭто обозначает что где то есть процесс который закрыл базу apt для использования. Это могло произойти в случае сбоя программы, которая закрыла базу и забыла ее открыть, или когда где то среди десятков открытых терминалов затерялось окно в котором запущена такая программа.
Посмотрим PID процесса занявший базу apt по лок-файлу
ramok [100]~/ sudo fuser /var/lib/apt/lists/lock
/var/lib/apt/lists/lock: 22069Если есть желание, то можно посмотреть что за программа залочила базу apt
ramok ~/ ps aux | grep 22069
root 22069 2.3 2.2 28704 22792 pts/27 S+ 11:22 0:01 apt-get upgradeУбиваем процесс который занял базу:
ramok ~/ sudo fuser -k -TERM /var/lib/apt/lists/lock
/var/lib/apt/lists/lock: 22069
ramok ~/или не мудрствуя лукаво
ramok ~/ sudo kill -TERM 22069

