Какую информацию показывает Ctrl-t во время терминального «git push»?

#git

#git

Вопрос:

Я запускаю git с терминала Mac OS X. Во время длительного «git push» я случайно нажал ctrl-t, и появилась некоторая информация о загрузке. Я полагаю, что это какая-то информация о запущенном процессе, но я не могу найти документацию об этом.

Что означает эта информация?

Пример запуска:

 danbj$ git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 503 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
**load: 1.94  cmd: ssh 30002 waiting 0.01u 0.01s**
load: 2.11  cmd: ssh 30002 waiting 0.01u 0.01s
load: 2.11  cmd: ssh 30002 waiting 0.01u 0.01s
load: 2.10  cmd: ssh 30002 waiting 0.01u 0.01s
load: 2.10  cmd: ssh 30002 waiting 0.01u 0.01s
load: 2.09  cmd: ssh 30002 waiting 0.01u 0.01s
load: 2.09  cmd: ssh 30002 waiting 0.01u 0.01s
load: 2.08  cmd: ssh 30002 waiting 0.01u 0.01s
  

Ответ №1:

Control-T в macOS поступает из BSD. Это status символ из stty настроек:

 $ stty -a
[snip]
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^H; intr = ^C; kill = ^X; lnext = ^V;
    min = 1; quit = ^; reprint = ^R; start = ^Q; status = ^T;
    stop = ^S; susp = ^Z; time = 0; werase = ^W;
  

и задокументировано в termios (4):

  STATUS  Special character on input and is recognized if the ICANON flag
         is set.  Receipt of this character causes a SIGINFO signal to be
         sent to the foreground process group of the terminal.  Also, if
         the NOKERNINFO flag is not set, it causes the kernel to write a
         status message to the terminal that displays the current load
         average, the name of the command in the foreground, its process
         ID, the symbolic wait channel, the number of user and system sec-
         onds used, the percentage of cpu the process is getting, and the
         resident set size of the process.
  

Эта печать статуса и существование самого символа статуса получены из кода, написанного мной и Реми Постом (с участием нескольких других; Фред Блондер, вполне возможно, приложил к этому руку, плюс, конечно, аспиранты, которые у нас были из Стэнфорда и Массачусетского технологического института), когда я былв Университете Мэриленда, в середине-конце 1980-х годов. SIGINFO Сигнал и флаг NOKERNINFO управления были добавлены позже, в 1990-х годах (или, возможно, даже немного позже).

(Насколько я помню, у ITS, TOPS-10, TOPS-20 и / или TENEX / TWENEX было что-то подобное. Я никогда не использовал ни один из них сам, но именно отсюда возникла идея.)

Комментарии:

1. Спасибо вам за (всю) вашу работу по добавлению этого! Это замечательная вещь, которой я люблю пользоваться. Я надеюсь, что в какой-то момент он будет добавлен в ядро Linux (и любое поддерживающее GNU и / или другое программное обеспечение), потому что, когда я работаю в таких системах, я часто обнаруживаю, что мне его не хватает.

Ответ №2:

Нажатие Control T во время выполнения команды в терминале покажет, какой процесс выполняется, нагрузку, PID процесса и его время пользователя и ядра.

Комментарии:

1. По-видимому, он работает, посылая SIGINFO сигнал (этот сигнал не существует в Linux).

2. @KeithThompson: средняя загрузка и информация о процессе печатаются внутри ядра. По SIGINFO умолчанию сигнал игнорируется, но некоторые программы (например, BSD make ) перехватывают его и печатают дополнительную информацию.