我想将 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。