Для каждого процесса в дереве укажите имя процесса, имя , и имя владельца процесса.
Вам нужен способ получить эту информацию, возможно, на основе PID ("идентификационный номер процесса"), поскольку PPID (идентификатор родительского процесса) приведет вас вверх по дереву к родительскому процессу. Подсказка: PID текущего процесса bash находится в $BASHPID
(или $$
).
Нарисуйте дерево процессов и родительских процессов, начиная с вашей оболочки и до самого ядра
Разгадка №2: Ядро запускает только один процесс - демон init (традиционно называется init
, но может называться и по-другому). PID этого процесса равен 1, а его родительского процесса - 0. Все остальное является потомками init, так что именно к нему ведет ваше дерево.
Технически, я не думаю, что вас просят нарисовать дерево, вас просят нарисовать цепочку, хотя концептуально эта цепочка - путь через дерево (вспомните файл путь, который является серией/цепочкой каталогов, которые являются частью большего дерева каталогов). Вы прослеживаете путь через ветви этого концептуального дерева к "корню" дерева (деревья в информатике обычно представляются перевернутыми по сравнению с реальным деревом, где основание/корень находится наверху, а ветви разветвляются вниз).
root
/ \
/\ /\
/\/\ /\/\
$ find /path/to -mindepth 1 -maxdepth 1 -exec sh -c '
[ -d "$1" ] && printf "%s/\n" "${1##*/}" || printf "%s\n" "${1##*/}" ' _ {} \;
aDirectory/
afile
Пояснения:
[ -d "$1" ]
, это проверяет, является ли это каталогом , если да, то запустите егоprintf
:
printf "%s/\n" "${1##*/}"
иначе, запустить нижеprintf
:
printf "%s\n" "${1##*/}"
${1##*/}
:это удаляет самое длинное совпадение всего *
до последней косой черты /
, увиденное начало от начала пути к файлу/каталогу, что приведет только к последнему имени каталога/файла. По крайней мере, с GNU find вы можете использовать встроенный -в -printf
, например.
find. -mindepth 1 -maxdepth 1 -type d -printf '%f/\n' -o -type f -printf '%f\n'