Процессы в сеансе в интерактивной оболочке и в сценарии

Я попытался правильно установить разрешение, но все равно получил ту же ошибку. Наконец-то я обновил свою федору до последней версии, и она каким-то образом это исправила.

chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

В последнем варианте мне пришлось монтировать жесткий диск с помощью компакт-диска восстановления.

4
30.06.2019, 00:31
1 ответ

ps' -s sessionidвыбор процессов на основе их идентификатора сеанса.

Вы можете использовать ps -j, чтобы увидеть идентификатор сеанса процессов. Сеансы вместе с группами процессов обычно используются для управления заданиями оболочки (, поэтому-j).

Ваш эмулятор терминала создает новый сеанс с процессом, который затем повторно используется для выполнения предпочитаемой вами оболочки. Таким образом, в терминале идентификатор сеанса обычно совпадает с pid этой оболочки.

Итак, если вы запустите ps -j -s "$$"в этой оболочке , вы получите процессы в сеансе, потому что"$$"оказывается таким же, как идентификатор сеанса.

Если вы запустите эту команду в любой другой оболочке (, такой как оболочка, которая выполняется в дочернем процессе для интерпретации вашего testingсценария ), любой оболочке, которая не является лидером сеанса, вы ничего не получите. потому что нет сеанса с идентификатором, соответствующим pid этой оболочки.

$ ps -j -s "$$"
  PID  PGID   SID TTY          TIME CMD
 7239  7239  7239 pts/7    00:00:00 zsh
21002 21002  7239 pts/7    00:00:00 ps

$$— 7239, лидер сеанса. Так что ps -j -s 7239дает мне все процессы в этом сеансе.

$ sh -xc 'ps -j -s "$$"; ps -j -p "$$"'
+ ps -j -s 21044
  PID  PGID   SID TTY          TIME CMD
+ ps -j -p 21044
  PID  PGID   SID TTY          TIME CMD
21044 21044  7239 pts/7    00:00:00 sh

Первая команда psничего не возвращает, поскольку, как показывает вторая ps, сеанса с идентификатором 21044 нет, так как процесс с идентификатором 21044 не является лидером сеанса. Лидер сессии по-прежнему 7239, оболочка запущена эмулятором терминала.

$ sh -xc 'ps -j -s "$(($(ps -o sid= -p "$$")))"'
+ ps -o sid= -p 21215
+ ps -j -s 7239
  PID  PGID   SID TTY          TIME CMD
 7239  7239  7239 pts/7    00:00:00 zsh
21215 21215  7239 pts/7    00:00:00 sh
21217 21215  7239 pts/7    00:00:00 ps

Теперь мы видим все процессы в сеансе. Мы использовали ps -o sid= -p "$$", чтобы получить идентификатор сеанса, которому принадлежит $$.

10
27.01.2020, 20:48

Теги

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