2012-09-24 89 views
3

我想在linux中獲得最後一個/最新的進程pid。任何人都可以提示我找到那個命令?但我不知道哪個過程最後開始。獲取linux中的最後一個(最新)進程pid

+0

你想知道所謂的最後一道工序,並始終運行或最後一個過程被殺? –

+0

也許不是一個理想的答案,但這是我在SuperUser上找到的:http://superuser.com/questions/250066/the-easiest-method-to-get-the-pid-of-last-process。 –

+1

在大多數情況下,系統中的最後一個過程將是您開始瞭解最後一個過程的過程。也許你需要一個更好定義的概念,最後 –

回答

4

更新:感謝威廉關於awk的暗示。
前提條件:該流程仍有待運行。

我不是UNIX專家,但我想到了以下方法:

ps aux --sort +start_time | tail -n 4 | awk 'NR==1{print $2}' 

ps將列出所有的進程,我們要通過START_TIME對它們進行排序。之後我們將從輸出的最後一行[0]中取第四個,awk將返回在第二個字段中找到的pid。

[email protected] ~ % sleep 10 & 
[1] 3009 
[email protected] ~ % ps aux --sort +start_time | tail -n 4 | awk 'NR==1{print $2 " " $11}' 
3009 sleep 
[email protected] ~ % 

[0]第四行,因爲在我的命令行3個管道命令。

+1

不需要「頭」。改爲使用'awk'NR == 1 {...}'。 –

+1

這裏有一個巨大的競爭條件,這往往不會產生有意義的結果。 –

+0

是......我已經使用meisterluk技術,並根據我的要求更改了命令。 – advishnuprasad

6

如果你想要最近執行的後臺命令的進程ID,你可以使用!變量。例如:

> gvim text.txt & 
> echo $! 
2842 
2

獲取PID

#!/bin/bash 
my-app & echo $! 

保存PID變量:

#!/bin/bash 
my-app & export APP_PID=$! 

保存所有實例PID在文本文件中:

#!/bin/bash 
my-app & echo $! >>/tmp/my-app.pid 

保存輸出,錯誤和PID在分隔的文件:

#!/bin/bash 
my-app >/tmp/my-app.log 2>/tmp/my-app.error.log & echo $! >>/tmp/my-app.pid 

echo "my-app PID's: $(cat /tmp/my-app.pid)"