Сценарий должен представить команду pstree -hsup $$
.
Я пробовал много разных способов, но не смог Я не могу напечатать такой вывод
28348 (bash,root)
28347 (su,root)
28346 (sudo,root)
14085 (bash,user)
14083 (lxterminal,user)
1 (Systemd,root)
ps -o ppid
выведет pid родительского процесса. Итак, начните с текущего pid и спросите родителя, затем его родителя и так далее.
#! /bin/bash
pid=$1
while ((pid)) ; do
ps -h -o 'pid,comm,euser' $pid \
| sed -E 's/^( *[0-9]+ )([^ ]+) *([^ ]+)/\1(\2,\3)/'
pid=$(ps -h -o ppid $pid)
done
Вы хотите вывести pid, команду и эффективного пользователя (или, может быть, реального пользователя?). Укажите их в -o
и используйте sed
для переформатирования вывода. Здесь мы захватываем три строки без пробелов и вставляем круглые скобки и запятую там, где это необходимо.