如何重定向运行中的进程的 STDERR/STDOUT 输出?
2024-03-09 00:59:22
在进程运行中重定向 STDERR/STDOUT
简介
在使用命令行时,有时需要在程序启动后重定向其标准错误和标准输出。这可以帮助在保持终端整洁的同时监控进程或记录其输出。本文将探讨几种使用命令行在进程启动后重定向 STDERR/STDOUT 的方法。
使用 Script 命令
script
命令是记录终端会话的一个强大工具,包括程序输出。要使用 script
重定向输出,请遵循以下步骤:
- 启动
script
命令,并将输出重定向到一个文件:
script -a output.log
- 启动要重定向的程序。
- 按
Ctrl+d
退出script
。 - 使用文本编辑器打开
output.log
文件以查看程序输出。
使用 Expect 命令
expect
命令用于自动化交互式程序。它可以用来启动一个程序,在看到特定模式后发送命令,并将输出重定向到一个文件。
- 创建一个 expect 脚本:
#!/usr/bin/expect
spawn <program_name>
expect "pattern"
send "command\r"
- 运行 expect 脚本,并将输出重定向到一个文件:
expect script.exp > output.log
使用 Pmap 和 Strace 命令
pmap
和 strace
命令可以协同工作,跟踪进程的系统调用。这允许识别程序的 I/O 操作并使用重定向对其输出进行重定向。
- 使用
pmap
获取进程的 PID:
pmap -x <program_name>
- 使用
strace
跟踪进程的系统调用:
strace -p <pid> -f -o output.log
在 output.log
文件中,找到程序的 I/O 调用并使用重定向对其进行重定向。
示例
以下是使用 script
命令重定向 ping
命令输出的示例:
script -a ping.log
ping google.com
Ctrl+d
cat ping.log
结论
在进程启动后重定向 STDERR/STDOUT 是一种有用的技术,可帮助保持终端整洁并监控进程输出。本文介绍了使用 script
、expect
、pmap
和 strace
命令实现这一目标的不同方法。通过选择最适合特定需求的方法,用户可以有效地控制程序的输出并提高命令行工作效率。
常见问题解答
-
重定向会影响程序的性能吗?
重定向可能会略微影响程序性能,具体取决于重定向的目标和程序的 I/O 操作量。
-
重定向适用于所有程序吗?
重定向适用于大多数程序,但某些程序可能使用非标准 I/O 流或忽略重定向。
-
我可以重定向到多个目标吗?
是的,可以使用 tee 命令或其他工具将输出同时重定向到多个目标。
-
如何取消重定向?
重定向由 shell 处理,通过关闭 shell 或终止重定向程序可以取消重定向。
-
重定向有哪些其他用途?
重定向还可用于将输入重定向到程序或创建日志文件来记录程序错误和警告。