将进程的输出写入文件名中包含进程标识的文件

时间:2012-11-21 11:28:22

标签: bash background-process pid io-redirection

这就是我想要实现的目标:

  • 在后台运行命令/进程,并将其输出重定向到临时文件,该文件以后台进程的进程ID命名。
  • 实施例:
    • top& //此后台进程的进程ID为1123
    • top的输出应存储在文件1123.temp

这可能吗?因为要在后台真正运行它,我们不必在将其标记为后台进程之前进行重定向吗?或者有一些技巧可以解决这个问题吗?

2 个答案:

答案 0 :(得分:6)

您可以重定向到临时文件,然后将mv该文件重定向到所需的名称,例如

process > /tmp/process.log &
mv /tmp/process.log /tmp/$!.log

$!是先前落后的流程的pid。请注意,mv只是重命名该文件。它不会打断写入它。

答案 1 :(得分:2)

在bash中运行exec命令会将当前进程(执行bash的进程)替换为您正在执行的进程。像

这样的东西
bash -c "exec top > ${BASHPID}.temp" &

应该有用。