如何在Linux/Unix中返回最后一个命令的pid

时间:2020-01-09 10:39:37  来源:igfitidea点击:

如何查找并返回在Linux中执行的最后一个命令的PID。
如何在Linux中返回命令的PID?
您可以在Shell脚本或bash中轻松找到最后执行的命令的PID。
本教程说明如何获取上次执行的应用程序/程序的PID。

如何在Linux中返回最后一个命令的pid

语法如下:

  • 打开终端应用程序
  • 在后台运行命令或应用程序。例如:firefox&
  • 要获取最后执行的命令的PID,请执行:echo" $!"
  • 将最后一个命令的pid存储在名为foo的变量中:foo = $!
  • 打印它,运行:echo" $foo"

最后执行的命令的PID在$!中。变量

bash特别对待几个变量。
仅可引用这些变量,不允许对其进行分配。
例如,$!扩展为最近放置在后台的命令/程序的进程ID(PID),无论是作为异步命令执行还是使用bg命令/内置命令。

如何获得刚刚开始的过程的pid

让我们开始睡眠过程,运行:

sleep 20 &
echo $!

或者

firefox &
echo $!

使用特殊shell变量显示的最后执行命令的PID

Shell脚本示例

让我们创建一个名为my-app.sh的shell脚本包装:

#!/bin/bash
echo "Starting my Linux/Unix awesome-app..."
/path/to/your/awesome-app &
_pid=$! 
echo "$_pid" > /var/run/awesome-app.pid
echo "Pid $_pid stored in /var/run/awesome-app.pid"

使用作业内部命令

jobs命令显示作业的状态,例如:

sleep 20 &

要列出进程ID,将-p选项传递给cron:

my-app &
jobs -p

jobs命令可用于ksh和其他shell。
通常,我在shell脚本包装中放入以下内容:

#!/bin/bash
_name="/path/to/my-java-app"
_pid="/path/to/my-java-app.pid"
((${_name}) & jobs -p >${_pid})

甚至可以在使用以下语法运行之前获取命令的PID

bash -c 'echo $$; exec /path/to/my-command'

但是,我建议坚持使用$_jobs -p方法。