【问题标题】:Get the last(latest) process pid in linux获取linux中最后一个(最新的)进程pid
【发布时间】:2012-09-15 17:42:09
【问题描述】:

我想获取 linux 中的最后一个/最新进程 pid。谁能建议我找到该命令的命令?但我不知道哪个进程最后开始了。

【问题讨论】:

  • 您想知道最后一个被调用并始终运行的进程还是最后一个被杀死的进程?
  • 也许不是一个理想的答案,但这是我在 SuperUser 上找到的:superuser.com/questions/250066/…
  • 系统中的最后一个进程在大多数情况下将是您已经开始找出最后一个进程是什么的那个。也许您需要更好地定义 last 的概念
  • 这是某种进程监控,我正在处理。我想知道,是否有任何命令告诉我在进程池中启动的最新进程而不是我要搜索最新进程的搜索进程。

标签: linux unix terminal command


【解决方案1】:

更新:感谢 William 提供有关 awk 的提示。
前提条件:该进程仍需运行。

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

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

ps 将列出所有进程,我们将按 start_time 对它们进行排序。之后,我们将从输出的最后一行 [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] 第四行,因为我的命令行中有三个管道命令。

【讨论】:

  • 不需要head。请改用awk 'NR==1{...}
  • 这里有一个巨大的竞争条件,这通常不会产生有意义的结果。
  • 是的...我使用了meisterluk技术并根据我的要求更改了命令。
  • 有人知道ps --sort 的BSD/MacOS 等价物吗?此答案中的代码不可移植。
  • @rien333 也许像ps aux | sort -r -k9 - | awk 'NR==3{print $2}' 这样的东西有效?试图提供帮助,但在 BSD 上似乎很麻烦。
【解决方案2】:

如果你想要最近执行的后台命令的进程 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)"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 2016-07-23
      • 2011-06-08
      • 2012-10-13
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2020-03-19
      相关资源
      最近更新 更多