Лучший способ, ИМХО, состоит в том, чтобы заставить top
использовать «пакетный» режим(-b
флаг ), который предназначен для использования с не -интерактивными вариантами использования, такими как передача в другую программу или в файл.
Итак, это
top -n1 -b | head
не покидает оболочку без курсора.
Насчет почему пропадает курсор ...
Так как top
является интерактивной программой, она "возится" с терминалом, чтобы получить ввод, прокрутить содержимое и т.д., и она скрывает курсор.
При завершении он должен восстановить курсор и состояние дисплея, которое он обнаружил до вызова, и он делает это, отправляя один или несколько управляющих кодов самому терминалу.
При передаче команды через head
этот управляющий код не пройдет через(head
по умолчанию печатаются только первые 10 строк, а вывод как top
, так и управляющих кодов для восстановления состояния терминала: всегда >10 строк ).
На самом деле, если вы дадите head
достаточно строк для печати, появится курсор!
Например,
top -n1 | head -n 100
оставляет курсор в моей системе.
в зависимости от вашей ОС вам, вероятно, следует использовать:
strace # on linux. you can attach to a pid (if you (as root?) have the rights to do so)
# you can also "follow its children" (using the appropriate options : `man strace` )
Аналоги (с другими возможностями )также существуют в других Unix-системах (и могут быть установлены и в вашей ОС):
dtrace # bsd originated, I believe. Should be present also on macos?
dtruss # on macos
truss # on aix
и др.
Для каждого :вам нужно найти правильные аргументы, необходимые для того, чтобы сделать то, что вы хотите. (например, обычно значения по умолчанию скрывают потерянные вещи и усекают аргументы системных вызовов только до первых нескольких символов и т. д. :все это можно изменить с помощью опций)
И посмотрите, выводит ли он что-то на stderr (возможно ). И оберните его в сценарий, который действует в соответствии с тем, что вам нужно. (например, :2>/some/tracefile #и иметь еще один конец скрипта -f /some/tracefile и действовать, когда он видит тот или иной системный вызов.)