将 PID 保存为 nohup 输出文件的文件名的一部分

将 PID 保存为 nohup 输出文件的文件名的一部分

我想将 nohup 进程的 PID 保存为 nohup 生成的输出文件名称的一部分。

正在朝着正确的方向前进,但只有当具有其 ID 的进程已经稳定时才有效,即仅在下一行有效。这意味着它不起作用,因为它是错误的 PID(来自最后一个命令):

nohup echo "hello World" > nohup_out_`echo $!`.txt &

有没有办法将结果 PID 保存在 nohup 的输出文件名中?

答案1

注意:`echo $!`获得一个“无用回声”奖。

您可以自己创建文件,并在nohup打开后重命名。您必须确保文件保留在同一文件系统上,以便 inode 不会更改。如果 inode 没有更改,您可以在nohup写入文件时重命名它。mv在这种情况下,该命令不会移动任何内容。相反,它只会修改目录条目。这对 持有的文件句柄没有影响nohup

out=$(mktemp -p .)
nohup sh -c 'sleep 30 ; echo "hello world"' >> $out 2>&1 &
mv $out nohup_out_$!.txt
unset out

答案2

不可以。您不能将命令的 PID 保存在将该命令的输出重定向到的文件的名称中。

原因很简单,你的 shell 打开了分配给>或的文件>> 它运行该命令。目前还没有 PID。

相关内容