Для ответа на первую часть вопроса существует несколько флагов, к которым можно добавить -f
. Они включают -l
, -j
, -m
, и -L
. К сожалению, -o <format>
не может быть объединен с -f
.
Действительно, лучший способ получить точно, что Вы хотите, состоит в том, чтобы указать точно, что Вы хотите, например.
ps -e -o pid,ppid,pgid,sid,user,comm
Но можно добраться действительно рядом с добавлением -j
кому: -f
, сделать ps -efj
. Это добавляет обоих PGID
и SID
столбцы.
Демонстрация без -e
флаг для создания вывода короче сравните:
$ ps -f
UID PID PPID C STIME TTY TIME CMD
myuser 123 4513 0 18:20 pts/26 00:00:00 zsh
myuser 1282 123 0 18:20 pts/26 00:00:00 ps -f
$ ps -fj
UID PID PPID PGID SID C STIME TTY TIME CMD
myuser 123 4513 123 123 0 18:20 pts/26 00:00:00 zsh
myuser 1402 123 1402 123 0 18:20 pts/26 00:00:00 ps -fj
Ответить на вторую часть Вашего вопроса, причины ps -ef -o sid
только показывает Ваши собственные процессы, это переключается на режим BSD, когда это решает, что Вашими флагами не был совместимый POSIX. Это обозначается сообщением
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
Таким образом, это эквивалентно выполнению ps ef o sid
.
В режиме BSD, e
средства это распечатает среду процесса, и f
означает "лес". И значения по умолчанию режима BSD к печати всех процессов, принадлежавших текущему пользователю, которые имеют любой терминал, не только тех, которые на текущем терминале.
Попытайтесь измениться -o sid
кому: -o sid,cmd
видеть эффекты e
и f
опции.
$ ps ef o sid
SID
12345
567
567
...
$ ps ef o sid,cmd
SID CMD
12345 -zsh USER=... LOGNAME=...
567 zsh PWD=... LANG=...
567 \_ ps ef o sid,cmd LANG=... PWD=...
...
И сравните с ps u
видеть, что показанные процессы являются тем же (я добавил | wc -l
для краткости).
$ ps ef o cmd | wc -l
20
$ ps u | wc -l
20
Не знаю, что вы имеете в виду под "консольным вводом", но, наверное, вы хотите добавить и удалить ключи из shell-скриптов или командной строки или что-то в этом роде.
Интерфейс к связке ключей ядра представляет собой набор системных вызовов, таких как add_key(2)
. Вы не можете получить доступ к системным вызовам непосредственно из командной строки.
keyctl
- это интерфейс командной строки к связке ключей ядра, поэтому он вам понадобится.