Обязательно ли для оболочки входа в систему создавать запись utmp?

Использование дочернего процесса задается где-то в системных вызовах wait3 или wait4 через указатель struct rusage ( wait4 (2) ). В источниках bash мы находим:

$ egrep -r 'wait[34][[:blank:]]*\(' .
./jobs.c:   wait3 ((union wait *)statusp, options, (struct rusage *)0)
./jobs.c:   wait3 (statusp, options, (struct rusage *)0)
./jobs.c:   wait3 (statusp, options, (int *)0)
$

Пустой (struct rusage *) 0 указывает, что использование ресурсов не будет возвращено в bash . Поиск struct rusage действительно вызывает функцию time_command в execute_cmd.c , и это, похоже, собирает информацию об использовании через getrusage (2) . Однако это относится к TIMEFORMAT встроенной функции time и, похоже, не пересекается с кодом истории. Без исправления bash , я полагаю, вам нужно было бы выполнить какой-то клудж, связанный с запуском всего за время , а затем фиксировать стандартную ошибку, когда информация о времени появляется в каком-то файле?

]

2
25.08.2017, 10:29
1 ответ

Во-первых, ктоне заботится о оболочках входа в систему или чем-то подобном. Он просто выводит записи utmp. Вы можете иметь запись для терминалов без входа в систему; для графических сессий; для FTP-соединений (с полностью выдуманным именем «линии» tty); на что угодно.

Во-вторых, записи utmp создаются вручную— вы получаете запись только в том случае, если программа, которая обрабатывает ваш логин, вызывает pututline(…). Например, sshd делает это всегда, эмуляторы терминала частоделают это (но не всегда), а suникогда.

(Помните, что suне выделяет новый pty, поэтому он также не может добавить запись utmp — в противном случае вы получите несколько записей для одного и того же tty, что может запутать несколько программы.)

3
27.01.2020, 22:09

Теги

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