Как убить все дочерние процессы после того, как родительский процесс умер и все они переключились на init?

Я бы сделал это в bash , используя globstar . Как объясняется в man bash :

globstar
      If set, the pattern ** used in a pathname expansion con‐
      text will match all files and zero or  more  directories
      and  subdirectories.  If the pattern is followed by a /,
      only directories and subdirectories match.

Итак, чтобы переместить каталог run в каталог верхнего уровня x , а затем удалить остальные, вы можете сделать :

shopt -s globstar; mv x/**/run/ x/  && find x/ -type d -empty -delete

Команда shopt включает параметр globstar . mv x / ** / run / x / переместит все подкаталоги с именем run (обратите внимание, что это работает, только если есть только один каталог run ) в x и find удалит все пустые каталоги.

Если хотите, вы можете сделать все это в оболочке с расширенной глобализацией, но я предпочитаю подстраховку find -empty , чтобы быть уверенным, что непустые каталоги не будут удалены. Если вас это не волнует, вы можете использовать:

shopt -s globstar; shopt -s extglob; mv x/**/run/ x/ && rm -rf x/!(run)
1
09.11.2017, 16:50
1 ответ

Вы можете составить разумный краткий список, используя:

ps -ef | awk '$1 == "myUser" && $3 == 1'

Возможно, улучшите это, отфильтровав и другие поля, например, STIME не для запуска сеанса, TTY не ?, и CMD не начинается с /usr/lib или /usr/bin или /lib. Поместите список в файл для окончательной проверки, а затем выведите столбец 2 | xargs | убийство.

2
27.01.2020, 23:18

Теги

Похожие вопросы