从 Bash 脚本手动写入 PID 文件

Der*_*ike 12 bash

我如何编写一个运行长时间运行的程序并将程序进程 ID 存储在单独文件中的 Bash 脚本?

我想要类似的东西

#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Run Code Online (Sandbox Code Playgroud)

但是,正是这样做会ps工具完成后执行。

有没有办法获取创建的进程的进程ID?

Jer*_*ant 13

您可以使用“&”轻松地在后台运行该进程,然后使用“$!”获取后台进程的PID

#!/bin/bash
long_running_tool &
echo $! > pid_file
Run Code Online (Sandbox Code Playgroud)

然后,可选地,等待 $! 如果您希望 shell 阻塞直到进程完成执行。


use*_*686 9

#!/bin/bash
echo $$ > fooapp.pid
exec fooapp
Run Code Online (Sandbox Code Playgroud)

如前所述,exec 替换 bash为指定的程序,保留PID。