How to always cut the PID from `ps aux` command?

makansij picture makansij · Sep 2, 2017 · Viewed 17.1k times · Source

I'd like to get the pid from my processes. I do ps aux | cut -d ' ' -f 2 but I notice that sometimes it gets the pid and sometimes it does not:

[user@ip ~]$ ps aux 
user  2049  0.5 10.4 6059216 1623520 ?     Sl   date   8:48 process 
user 12290  0.3  6.9 5881568 1086244 ?     Sl   date  2:30 
[user@ip ~]$ ps aux | cut -d ' ' -f 2 

12290
[user@ip ~]$ ps aux |  cut -d ' ' -f 3
2049

notice that the first cut command is piping it to 2 whereas the second one is piping it to 3. How do I pick out the PID from these without having to know which number to use (2 or 3)?

Can someone please tell me the difference between these and why it picks up one and not the other?

Answer

CtheSky picture CtheSky · Sep 2, 2017

-d ' ' means using a single space as delimiter. Since there're 1 space before 2049 and 2 spaces before 12290, your command get them by -f 2 and -f 3.

I recommend using ps aux | awk '{print $2}' to get those pids.

Or you can use tr to squeeze those spaces first ps aux | tr -s ' ' | cut -d ' ' -f 2