我試圖獲取某個服務的PID。我嘗試這樣做,用下面的命令:AWK - 將最後一項從列表中刪除
ps aux | grep 'DynamoDBLocal' | awk '{print $2}'
給出輸出:
1021
1022
1161
這將返回我3個PID的,我想要的服務2和1的grep的只是沒有。我想從列表中刪除最後一個PID(來自grep的那個)。
我該如何做到這一點?
我試圖獲取某個服務的PID。我嘗試這樣做,用下面的命令:AWK - 將最後一項從列表中刪除
ps aux | grep 'DynamoDBLocal' | awk '{print $2}'
給出輸出:
1021
1022
1161
這將返回我3個PID的,我想要的服務2和1的grep的只是沒有。我想從列表中刪除最後一個PID(來自grep的那個)。
我該如何做到這一點?
只要使用pgrep
,正是在這種正確的工具案例:
pgrep 'DynamoDBLocal'
使用grep -v
:
ps aux | grep 'DynamoDBLocal' | grep -v grep | awk '{print $2}'
如果你有pgrep
在您的系統
pgrep DynamoDBLocal
你可以說:
ps aux | grep '[D]ynamoDBLocal' | awk '{print $2}'
有了一個調用awk
ps aux | awk '!/awk/ && /DynamoDBLocal/{print $2}'
我不知道那ps aux | grep '...'
是正確的方式。
不過,假設這是正確的方式,你可以做
ps aux | grep '...' | awk '{ if (prev) print prev; prev=$2 }'
嘗試pidof
,應該直接給你pid
。
pidof DynamoDBLocal
回答原來的問題:如何從輸出刪除線:
ps aux | grep 'DynamoDBLocal' | awk '{print $2}' | head --lines=-1
head
允許你查看X(默認爲10)的無堅不摧的第一行給定。值X與負前置它顯示除最後的X行以外的所有行。 '反'是tail
,順便說一句(當你對最後 X行感興趣)。
但是,鑑於您尋找PID的具體問題,我推薦pgrep
(perreals答案)。
在http://stackoverflow.com/a/3510850/1983854有一個很好的方法來討論這個話題。它是一樣的,但在那裏他們也稱'殺死'來殺死這個過程。 – fedorqui
請注意'grep re | awk'{print field}'可以替換爲'awk'/ re/{print field}''。 – Thor