重定向正在运行的进程的输出

用reredirect可以实现:https://github.com/jerome-pouiller/reredirect/

基础用法:

reredirect -m FILE PID

然后进程的stdout和stderr都重定向到FILE了。

如果要把stdout和stderr分别重定向到两个文件:

reredirect -o FILE1 -e FILE2 PID

重定向完成后,会打印一条消息:

# Previous state saved. To restore, use:
reredirect -N -O 5 -E 3 57780

意思应该是原来的stdout的fd变成了5,原来的stderr的fd变成了3。而这条命令的作用就是将原来的stdout和stderr都恢复回去。

reredirect甚至对挂在init进程下的孤儿进程都起作用。

这个repo还提供了relink,可以将进程的输出重定向到当前terminal:

relink PID

同样,relink对挂载init进程下的孤儿进程也有效。

特殊情况

  • 重定向到的文件被删除

新的文件不会被创建。可以重新跑一遍reredirect,这样文件会被自动新建,输出也会恢复。

  • 重定向到的文件已存在

不知道为什么,当重定向到的文件已存在时,重定向不会成功。这时要把老的文件删掉,然后重新跑一遍reredirect

相关

https://superuser.com/questions/473240/redirect-stdout-while-a-process-is-running-what-is-that-process-sending-to-d

https://stackoverflow.com/questions/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin

https://stackoverflow.com/questions/1323956/how-to-redirect-output-of-an-already-running-process

https://superuser.com/questions/76427/how-to-access-stdout-stderr-of-a-detached-process

https://www.baeldung.com/linux/redirect-output-of-running-process

https://blog.csdn.net/weixin_29343349/article/details/116582306

https://codingdict.com/questions/42674

posted @ 2024-09-28 14:13  寻找繁星  阅读(10)  评论(0编辑  收藏  举报