Есть ли способ заставить «top» работать ровно один раз и выйти?


13

Я считаю вывод команды shell topпростым и знакомым способом получить приблизительное представление о состоянии машины. Я бы хотел обслуживать topвывод (или что-то очень похожее на него) с крошечного веб-сервера на машине для грубого мониторинга.

Есть ли способ заставить top написать свой текстовый вывод ровно один раз , без форматирования символов? Я пробовал это:

(sleep 1; echo 'q') | top > output.txt

Кажется, это близко к тому, что я хочу, за исключением того, что (1) нет никакой гарантии, что я не получу больше или меньше одного скриншота информации и (2) мне придется удалить все символы форматирования терминала.

Или есть какая-то другая topподобная команда, которая перечисляет как память на уровне машины, так и на уровне процесса / использование процессора / информацию о времени безотказной работы?

(В идеале мне бы хотелось, чтобы стратегия была переносимой как для Linux, так и для Mac OS X, поскольку наши разработчики используют Mac, а наша среда разработки - Linux.)

Ответы:


22

В Linux вы можете попробовать это:

top -bn1 > output.txt

От man top:

-b : Batch-mode operation
            Starts top in 'Batch' mode, which could be useful for sending
            output from top to other programs or  to  a  file.   In  this
            mode, top will not accept input and runs until the iterations
            limit you've set with the '-n' command-line option  or  until
            killed.
....
-n : Number-of-iterations limit as:  -n number
            Specifies  the  maximum  number of iterations, or frames, top
            should produce before ending.

С OS X попробуйте:

top -l 1

С верхней страницы OSX :

 -l <samples>
              Use logging mode and display <samples> samples, even if 
              standard output is a terminal. 0 is treated  as  infinity.   
              Rather than redisplaying, output is periodically printed in 
              raw form. Note that the first sample displayed will have an 
              invalid %CPU displayed for each process,  as it is calculated 
              using the delta between samples.

Это выглядит как ответ, который я бы искал, если бы topв OS X поддерживал флаг -b. :-( К сожалению, это не так, и я не вижу версию, topдоступную через homebrew. Это похоже на правильный ответ для Linux, хотя.
Mickalot

@Mickalot: смотрите мой обновленный. Можете ли вы установить GNU top в Mac OSX?
cuonglm

@Gnuoc: /usr/bin/top -l 1на OSX 10.9.4 идеально ... спасибо! Что касается установки GNU top, я мог бы установить ее на свою машину, но мне пришлось бы убедить других разработчиков установить ее на свои машины, чтобы мой код работал на них, поэтому я бы предпочел этого избежать. (Если это не доступно через homebrew, будет сопротивление.) Теперь, когда я буду переключаться в зависимости от платформы, я буду жадным ... вы знаете о каком-либо полуэквиваленте Windows, так что эти разработчики (у нас есть несколько) может также иметь сырую страницу статуса? (Если нет, это хорошо, ваш ответ уже супер-полезен!)
Mickalot

@Mickalot: Запомните примечание на главной странице OSX. Обратите внимание, что в первом отображаемом примере будет отображаться неверный% ЦП для каждого процесса, так как он рассчитывается с использованием разницы между выборками. , С пользователями Windows, возможно, вы можете использовать `` cygwin`
cuonglm

@Gnuoc Спасибо за дополнительный балл. Я полагаю, я могу сделать top -l 2и выбросить первую страницу образцов?
Микалот

1

Чтобы получить похожие номера типов из системы Windows, вам нужно взглянуть на powershell.

Просто чтобы получить список процессов и посмотреть на вас get-process. Взгляните на эту ссылку .

При этом некоторые дальнейшие поиски, нашли хорошую команду немного здесь .

Что, если вы возьмете из представленного цикла while, для ваших нужд будет:

ps | sort -desc cpu | select -first 30

psв powershell это псевдоним для get-process.


Это звучит как отличная идея! Я возьму одного из моих коллег по Windows, чтобы попробовать это ...
Mickalot
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.