如何从 bash 脚本获取最后运行的进程的 PID?

如何从 bash 脚本获取最后运行的进程的 PID?

我试图从 bash 脚本中获取最后执行的命令的进程 ID。通常我会这样做:

$ nohup ./test > nhout &
nohup: redirecting stderr to stdout
$ echo $!
3006196 #This is the PID

我正在尝试在 shell 脚本中执行完全相同的操作。

#!/bin/bash
for i in {1..10};do
    `nohup ./testscript_${i} > nhout_${i} &`
    echo $! >> pid_list.txt
done

但是,当我检查时pid_list.txt,该文件是空的。我理解这可能是因为$!指的是我运行的脚本而不是命令nohup。但我不知道如何解决这个问题,也无法在网上找到任何资源。我将如何实现这一目标?

答案1

nohup该命令周围有一对不正确的反引号。结果发生的是,您正在执行nohup.该nohup命令仅作为副作用运行,以生成要执行的反引号的输出。

试试这个:

#!/bin/bash
for i in {1..10}; do
    nohup "./testscript_$i" > "nhout_$i" &
    echo "$!" >> pid_list.txt
done

相关内容