如何获取shell脚本中最后执行的命令的pid?

如何获取shell脚本中最后执行的命令的pid?

我想要一个像这样的 shell 脚本:

my-app &
echo $my-app-pid

但我不知道如何获取刚刚执行的命令的pid。

我知道我可以使用jobs -p my-app命令来 grep pid。但如果我想多次执行shell,这个方法就不行了。因为工作规范是模棱两可的。

答案1

最后执行命令的PID位于$!外壳变量:

my-app &
echo $!

答案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)"

答案3

尝试类似的东西

pidof my_app >> /tmp/my_app.pid

答案4

尝试这样的事情:

 ps ef | grep "[m]y-app" | awk '{print $2}'

将流程的第一个字母放在两者之间[ ]可确保您不会将该grep流程添加到列表中。如果需要,您还可以在您的用户名上添加 grep。

相关内容