87

Is there a way to sort ps output by process start time, so newest are either at the top or bottom ?

On Linux ?

On SysV5 ?

On Mac ?

Dean Smith
  • 1,230
  • 2
  • 11
  • 13

7 Answers7

120

This should work on Linux and SysV5

ps -ef --sort=start_time
Sekenre
  • 2,913
  • 1
  • 18
  • 17
12

Linux:

$ ps aux --sort=lstart 

OSX:

$ ps aux -O started
rkthkr
  • 8,503
  • 26
  • 38
  • 3
    I'm afraid neither of those sorts by start time. It does display the start time, but doesn't sort. – Dean Smith Jun 18 '09 at 09:45
  • 4
    The difference between lstart and start_time caught me out as well -- `lstart` gives a full timestamp, but cannot be used as a sort key. `start_time` gives the usual 'time within the last 24 hours, date otherwise' column, and can be used as a sort key. Both give 'STARTED' in the header. – LHMathies Apr 05 '12 at 08:22
  • time within last hour: if a process was launched yesterday at a time later than today, it will appear after today's process ... can't be used by sort, unless a bit of "awk" changes that – Olivier Dulac May 22 '13 at 10:16
  • @OlivierDulac: not for me. `15/12 15:40` appears before `16/12 15:39`, just as `13:39` appears before `15:38`. – Gauthier Dec 16 '14 at 14:41
  • 2
    lstart did not work for me. start_time did. – Felipe Alvarez Mar 06 '15 at 05:21
  • OS X 10.11: `ps: started: keyword not found`. `ps -L` gives `lstart` and `start`. – 0x89 Aug 01 '16 at 09:30
5

Along with the great answers above, sometimes I just want to see the top 20 offenders by process sorted descending by time, cpu% and memory usage.

For that I use:

ps auxww --sort=lstart | sort -r -k3,4 | head -20

This would be on a CentOS platform, though I've enjoyed the same results on Fedora as well.

Oh and for grins, I sometimes want to remove a set of processes, so I simply use a variant on the above that includes a bit of grep -v action, such as:

ps auxww --sort=lstart | sort -r -k3,4 | grep -v "sbin/httpd" | head -20
4

I can't comment yet, but to answer the question about how to reverse the order of a time sort, just put a minus sign (-) in front of the field.
Example: ps -elf --sort=-start_time

Diamond
  • 8,791
  • 3
  • 22
  • 37
Barry S
  • 41
  • 1
2

Or try 'ls', as it allows time formats that are easy to sort, and easier to use.

( cd /proc; ls -td --full-time --time-style=+%s [0123456789]*; )

Outputs the date/time in epoch, newest procs at the top.

Jim Black
  • 266
  • 2
  • 12
1

Try simple command:

ps | sort -k7 -n

-k7 for the time column and -n for numeric.

Example

Andrew Schulman
  • 8,561
  • 21
  • 31
  • 47
0

I know it's obsolete syntax, but I find it practical for brevity:

ps OT <other_options>

For example:

ps OT ax