LINUX.ORG.RU

Как остановить процессы в chroot?


0

0

Взял openvz'ый темплейт Ubuntu 8.04, сделал:
mount -o bind /dev /chroot/dev/
mount -t proc none /chroot/proc
chroot /chroot /bin/bash

И из chroot сделал dist-upgrade до 8.10, вышел из chroot и при попытке отмонтировать /chroot/dev/ или /chroot/proc/ получил сообщение, что они заняты. lsof показал, что их используют какие-то процессы, запущенные chroot.

Как разом остановить все процессы, запущенные в chroot? Делать в цикле kill -9 -- перспектива не из веселых :). И почему при выходе из chroot все дочерние процессы сами не останавливаются?

Спасибо.

anonymous

Что-то вроде такого:

/bin/ls -1 /proc/ | grep '^[0-9]*$' | while read i; do
root="`readlink "/proc/$i/root"`";
[ "$root" != / ] && echo $i: $root;
done

Cкрипт выведет <pid>: </path/to/chroot> для всех процессов, кои имеют /proc/<pid>/root отличный от /

Вызов kill(1) и конкретное значение пути добавить по вкусу.

lodin ★★★★
()
Ответ на: комментарий от lodin

BUGS
1. Работает только от рута
2. race condition: выдает "pid: " для процессов, завершившихся между вызовом ls и readlink (у меня их было два, видимо, ls и grep)

lodin ★★★★
()
Ответ на: комментарий от anonymous

коначай бредить, chroot не виртуальная машина

sdio ★★★★★
()
Ответ на: комментарий от anonymous

Ненененене!

1) Как Вы предлагаете процессы завершать? SIGTERM могут перехватить и проигнорировать, а SIGKILL нельзя, потому что тогда процесс(ы) просто накроются, вместо того, чтобы корректно завершиться.

Есть вариант TERM, ждём 15 секунд, KILL, что собственно делается при шатдауне системы -- но за это init отвечает, а не ядро! Если хотите init в чруте, тогда добро пожаловать в прекрасный мир openvz.

2) Существенно усложняется часть ядра, отвечающая за chroot, да вдобавок она начинает влиять на форки/экзеки... Будет решето.

3) Наконец, допустим, я безопасности для хочу засунуть в чрут какого-нибудь демона, но сам демон это не имеет. Пишем стартовый скрипт: чрут, смена юзера, вызов демона, гудбай. Как теперь отключить механизм автошатдауна для такой ситуации?

В общем, возникает много головной боли... И мало толку!

lodin ★★★★
()

> Как разом остановить все процессы, запущенные в chroot?

Не-не-не. Как убить процессы, мещающие демонтировать (что-то)? fuser -km (что-то). См. fuser(1), там сигнал можно выбирать и т.д.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.