I want to write the output of a specific \'top\' command to a file. I did some googling and find out that it can be done by using the following command.
top
CTRL+C is not a ideal solution due to control stays in CLI. You can use below command which dumps top output to a file:
top -n 1 -b > top-output.txt
for me top -b > test.txt
will store all output from top
ok even if i break it with ctrl-c
. I suggest you dump first, and then grep
the resulting file.
How about using while
loop and -n 1
:
while sleep 3; do
top -b -n1 | grep init > top-output.txt
done
Solved this issue. This works even if you press Ctrl+c Even I was facing the same issue when I wanted to log Cpu%. Execute this shell script:
#!/bin/sh
while true; do
echo "$(top -b -n 1 | grep init)" | tee -a top-output.log
sleep 1
done
man top
for more detailsSource for explanations of -b and -n: manpages
man top
Kruthika
As pointed out by @Thor in a comment, you just need to ensure that grep
is not buffering arbitrarily but per-line with the --line-buffered
option:
top -bn 10 | grep 'init' --line-buffered | tee top-output.txt
Without grep-ing, redirecting the output of top
to a file works just fine, interrupt included.
From the top command, we can see all the processes with their PID (Process ID). To print top output for only one process, use the following command:
$ top –p PID
To save top command of any process to a file, use the following command:
top -p $PROCESS_ID -b > top.log
where > redirects standard output to a file.