2012-09-24 53 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)"