在Linux中获取最新的进程PID

4
我想在Linux中获取最后一个/最新的进程pid。有人能建议我找到这个命令吗?但是我不知道哪个进程是最后启动的。

你想知道最后一个被调用且一直在运行的进程,还是最后一个被终止的进程? - Simon MILHAU
也许不是最理想的答案,但这是我在SuperUser上找到的:http://superuser.com/questions/250066/the-easiest-method-to-get-the-pid-of-last-process。 - Tomasz Kowalczyk
1
系统中的最后一个进程通常是您启动的进程,以找出最后一个进程。也许您需要更好地定义“最后”的概念。 - n. m.
这是我正在处理的某种进程监控。我想知道,是否有任何命令可以告诉我进程池中最新启动的进程,而不是我要搜索的搜索进程的最新进程。 - advishnuprasad
3个回答

8

更新:感谢William提供的awk提示。
前置条件:进程仍在运行中。

我不是UNIX专家,但我考虑了以下方法:

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

ps 命令将列出所有进程,我们将按照启动时间进行排序。然后,我们将获取输出的倒数第四行 [0],并使用 awk 返回第二个字段中找到的 pid。

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

[0] 我的命令行中有三个管道命令,因此这是第四行。

1
不需要使用 head 命令,可以使用 awk 'NR==1{...} 命令。 - William Pursell
1
这里存在一个巨大的竞态条件,这往往会导致无法产生有意义的结果。 - William Pursell
嗯...我已经使用了神级技巧,并根据我的需求更改了命令。 - advishnuprasad
这真的很好,但我们如何列出最后启动的10个进程? - user63274
@user63274 ps aux --sort +start_time | tail -n 14 | head -n 10 | awk '{print $2}' - meisterluk
显示剩余2条评论

6
如果你想获取最近执行的后台命令的进程ID,可以使用!变量。例如:
 > gvim text.txt &
 > echo $!
 2842

3

获取 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)"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接